Преобразование UTF8 в UTF16 с помощью iconv

Когда я использую 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. Любая помощь по этому вопросу?

26
задан PerfectGamesOnline.com 19 January 2012 в 10:57
поделиться