Вдохновленный этим вопросом , могу ли я использовать iconv
команду для генерации вывода UTF-16 с спецификацией и указанным порядком байтов?
Команда iconv
преобразует текст из одной кодировки в другую.
Например:
echo hello | iconv -f ascii -t utf-16
генерирует UTF-16 представление "hello\n"
.
Файлы UTF-16 часто, но не всегда, начинаются с метки порядка байтов (BOM), которая представляет собой 2-байтовую кодировку символа Unicode U+FEFF
. Вы можете определить порядковый номер файла UTF-16 с BOM, проверив, являются ли первые два байта FE FF
или FF FE
.
Команда iconv
имеет несколько опций для генерации вывода UTF-16:
$ iconv --list | grep -i utf-16
UTF-16//
UTF-16BE//
UTF-16LE//
Эта команда:
echo hello | iconv -f ascii -t utf-16be
генерирует UTF-16 с прямым порядком байтов без спецификации ; кажется, предполагается, что если вы указали порядковый номер, вам не нужно указывать его в выводе. Точно так же utf-16le
генерирует UTF-16 с прямым порядком байтов без спецификации.
Это:
echo hello | iconv -f ascii -t utf-16
генерирует (в моей системе x86 Ubuntu) UTF-16 с прямым порядком байтов с BOM - но я видел отчет о похожей команде, генерирующей UTF-16 с прямым порядком байтов с BOM, даже в системе с прямым порядком байтов.
Я всегда могу использовать utf-16be
или utf-16le
и предварительно добавить спецификацию вручную, но я ищу решение, которое просто использует iconv
команду.
Другой обходной путь, если вы знаете, что -t utf-16
порождает порядок байтов :
echo hello | iconv -f ascii -t utf-16 | dd conv=swab 2>/dev/null
Я хотел бы использовать что-то вроде:
iconv -f ascii -t utf-16bebom # big-endian with BOM
iconv -f ascii -t utf-16lebom # little-endian with BOM
но iconv
не поддерживает это.
РЕДАКТИРОВАТЬ :
Может ли кто-то, имеющий доступ к системе Mac OSX x86, опубликовать комментарий, показывающий (скопированный и вставленный) вывод следующей команды?
echo hello | iconv -f ascii -t utf-16 | od -x
iconv
- и удивляясь, почему -t utf-16
кажется, что порядок байтов не указан.
iconv -f UTF-8 -t UTF-16
, что в системе с прямым порядком байтов (MacOS) генерируется UTF-16 с прямым порядком байтов и спецификацией, что выглядит очень странно.