При конвертации вашего файла вы должны быть уверены, что он содержит метку порядка байтов. Несмотря на то, что в стандарте говорится, что метка порядка байтов не рекомендуется для 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