При конвертации вашего файла вы должны быть уверены, что он содержит метку порядка байтов. Несмотря на то, что в стандарте говорится, что метка порядка байтов не рекомендуется для UTF-8, между UTF-8 и ASCII могут быть законные путаницы без метки порядка байтов.
Кроме того, указание UTF-16BE
или UTF-16LE
не предшествует метке порядка байтов, поэтому я сначала преобразую в UTF-16
, в котором используется зависящий от платформы порядковый номер. Затем я использую file
для определения фактического порядка байтов и преобразования из него в UTF-16LE
.
Наконец, при создании файла с помощью bash
файл получает bash
кодировки locale charmap
«ы, так это то, что вам нужно сопоставить с.
(Я прописной все мои кодировки , потому что , когда вы перечислить все поддерживаемые кодировки iconv
«ы с iconv -l
они прописные буквы.)
BASH_ENCODING="$( locale charmap | tr [:lower:] [:upper:] )"
echo $var | iconv -f "$BASH_ENCODING" -t UTF-16 > UTF-16-UNKNOWN-ENDIANNESS-FILE
FILE_ENCODING="$( file --brief --mime-encoding UTF-16-UNKNOWN-ENDIANNESS-FILE )"
iconv -f "$FILE_ENCODING" -t UTF-16LE UTF-16-UNKNOWN-ENDIANNESS-FILE > file2.txt