Когда я использую iconv для преобразования из UTF16 в UTF8, все нормально, но наоборот не работает. У меня есть эти файлы:
a-16.strings: Little-endian UTF-16 Unicode c program text
a-8.strings: UTF-8 Unicode c program text, with very long lines
Текст выглядит нормально в редакторе. Когда я запускаю это:
iconv -f UTF-8 -t UTF-16LE a-8.strings > b-16.strings
Тогда я получаю такой результат:
b-16.strings: data
a-16.strings: Little-endian UTF-16 Unicode c program text
a-8.strings: UTF-8 Unicode c program text, with very long lines
Утилита file
не показывает ожидаемый формат файла, и текст также не выглядит хорошо в редакторе. Может ли быть так, что iconv не создает правильный BOM? Я запускаю его в командной строке MAC.
Почему b-16 не в правильном формате UTF-16LE? Есть ли другой способ преобразования utf8 в utf16?
Более подробная информация приведена ниже.
$ iconv -f UTF-8 -t UTF-16LE a-8.strings > b-16le-BAD-fromUTF8.strings
$ iconv -f UTF-8 -t UTF-16 a-8.strings > b-16be.strings
$ iconv -f UTF-16 -t UTF-16LE b-16be.strings > b-16le-BAD-fromUTF16BE.strings
$ file *s
a-16.strings: Little-endian UTF-16 Unicode c program text, with very long lines
a-8.strings: UTF-8 Unicode c program text, with very long lines
b-16be.strings: Big-endian UTF-16 Unicode c program text, with very long lines
b-16le-BAD-fromUTF16BE.strings: data
b-16le-BAD-fromUTF8.strings: data
$ od -c a-16.strings | head
0000000 377 376 / \0 * \0 \0 \f 001 E \0 S \0 K \0
$ od -c a-8.strings | head
0000000 / * * * Č ** E S K Y ( J V O
$ od -c b-16be.strings | head
0000000 376 377 \0 / \0 * \0 * \0 * \0 001 \f \0 E
$ od -c b-16le-BAD-fromUTF16BE.strings | head
0000000 / \0 * \0 * \0 * \0 \0 \f 001 E \0 S \0
$ od -c b-16le-BAD-fromUTF8.strings | head
0000000 / \0 * \0 * \0 * \0 \0 \f 001 E \0 S \0
Очевидно, что BOM отсутствует всякий раз, когда я запускаю преобразование в UTF-16LE. Любая помощь по этому вопросу?