Terinspirasi oleh pertanyaan ini , dapatkah saya menggunakan iconv
perintah untuk menghasilkan output UTF-16 dengan BOM dan dengan endianness yang ditentukan?
The iconv
perintah bertobat teks dari satu pengkodean ke yang lain.
Sebagai contoh:
echo hello | iconv -f ascii -t utf-16
menghasilkan representasi UTF-16 dari "hello\n"
.
File UTF-16 sering, tetapi tidak selalu, mulai dengan Byte Order Mark (BOM), yang merupakan pengodean 2-byte dari karakter Unicode U+FEFF
. Anda dapat menentukan endianness file UTF-16 dengan BOM dengan memeriksa apakah dua byte pertama adalah FE FF
atau FF FE
.
The iconv
perintah memiliki beberapa pilihan untuk menghasilkan UTF-16 keluaran:
$ iconv --list | grep -i utf-16
UTF-16//
UTF-16BE//
UTF-16LE//
Perintah ini:
echo hello | iconv -f ascii -t utf-16be
menghasilkan big-endian UTF-16 tanpa BOM ; tampaknya menganggap bahwa jika Anda menentukan endianness, Anda tidak perlu menunjukkannya dalam output. Demikian pula, utf-16le
menghasilkan little-endian UTF-16 tanpa BOM.
Ini:
echo hello | iconv -f ascii -t utf-16
menghasilkan (pada sistem x86 Ubuntu saya) little-endian UTF-16 dengan BOM - tetapi saya telah melihat laporan dari perintah yang sama yang menghasilkan big-endian UTF-16 dengan BOM, bahkan pada sistem little-endian.
Saya selalu dapat menggunakan utf-16be
atau utf-16le
dan menambahkan BOM secara manual, tetapi saya sedang mencari solusi yang hanya menggunakan iconv
perintah.
Solusi lain, jika Anda tahu apa yang -t utf-16
dihasilkan endianness , adalah:
echo hello | iconv -f ascii -t utf-16 | dd conv=swab 2>/dev/null
Apa yang saya ingin seperti penggunaan adalah sesuatu seperti:
iconv -f ascii -t utf-16bebom # big-endian with BOM
iconv -f ascii -t utf-16lebom # little-endian with BOM
tetapi iconv
tidak mendukung itu.
EDIT:
Dapatkah seseorang dengan akses ke sistem Mac OSX x86 memposting komentar yang menunjukkan (copy-and-paste) output dari perintah berikut?
echo hello | iconv -f ascii -t utf-16 | od -x
iconv
- dan bertanya-tanya mengapa -t utf-16
tampaknya meninggalkan endianness tidak ditentukan.
iconv -f UTF-8 -t UTF-16
, dijalankan pada sistem little-endian (MacOS), menghasilkan UTF-16 big-endian dengan BOM, yang tampaknya sangat aneh.