Надихнувшись цим питанням , чи можу я використовувати iconv
команду для генерації виводу UTF-16 з BOM та із заданою витримкою?
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 з великим ендіаном без BOM ; начебто припускають, що якщо ви вказали ендіанси, вам не потрібно вказувати це у висновку. Аналогічно utf-16le
генерує малоконтензивний UTF-16 без BOM.
Це:
echo hello | iconv -f ascii -t utf-16
генерує (в моїй системі x86 Ubuntu) маленький ендіанський UTF-16 з BOM - але я бачив звіт аналогічної команди, що генерує UTF-16 з великим ендіаном з BOM, навіть у системі з малою ендіанією.
Я завжди можу використовувати utf-16be
або utf-16le
доповнювати BOM вручну, але я шукаю рішення, яке просто використовує 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
це не підтримує.
Редагувати:
Чи може хтось із доступом до системи x86 Mac OSX розмістити коментар із зазначенням (скопійованого та вставленого) висновку наступної команди?
echo hello | iconv -f ascii -t utf-16 | od -x
iconv
- і -t utf-16
цікавлюсь, чому, здається, залишається непідтверджена цінність.
iconv -f UTF-8 -t UTF-16
, що він працює за системою з малою ендіанією (MacOS), генеруючи UTF-16 з великим ендіаном з BOM, що здається дуже дивним.