Вдохновленный этим вопросом, могу ли я использовать команду 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