UTF-16LE
указывает iconv
генерировать UTF-16 с прямым порядком байтов без спецификации (метка порядка байтов). Очевидно, предполагается, что, поскольку вы указали LE
, спецификация не требуется.
UTF-16
говорит ему генерировать текст UTF-16 (в порядке байтов локального компьютера) с спецификацией.
Если вы работаете на машине с прямым порядком байтов, я не вижу способа iconv
сгенерировать UTF-16 с прямым порядком байтов с помощью спецификации, но я могу просто что-то упустить.
Я обнаружил, что команда file
не распознает текст UTF-16 без спецификации, и ваш редактор тоже может этого не делать. Но если вы запустите iconv -f UTF-16LE -t UTF_8 b-16 strings
, вы должны получить действительную версию UTF-8 исходного файла.
Попробуйте запустить od -c
для файлов, чтобы увидеть их фактическое содержимое.
ОБНОВЛЕНИЕ:
Похоже, что вы находитесь на машине с прямым порядком байтов (x86 - с прямым порядком байтов), и вы пытаетесь сгенерировать файл UTF-16 с прямым порядком байтов с помощью спецификации. Это верно? Насколько я могу сказать, iconv
не будет делать это напрямую. Но это должно работать:
( printf "\xff\xfe" ; iconv -f utf-8 -t utf-16le UTF-8-FILE ) > UTF-16-FILE
Поведение printf
может зависит от настроек вашего языка; У меня LANG=en_US.UTF-8
.
(Кто-нибудь может предложить более элегантное решение?)
Еще один обходной путь, , если , то вы знаете, что порядок вывода, производимый -t utf-16
:
iconv -f utf-8 -t utf-16 UTF-8-FILE | dd conv=swab 2>/dev/null