
echo hello | iconv -f ascii -t utf-16le | od -x
ビッグエンディアンの結果のように思われる
0068 0065 006c 006c 006f 000a
一方、同じ行をle
utf16leシステム(OS X)で使用した場合、
echo hello | iconv -f ascii -t utf-16 | od -x
fffe 6800 6500 6c00 6c00 6f00 0a00
od -x
エンディアンネスは変更されますか?
答え1
$ echo hello | iconv -f ascii -t utf-16le | hexdump -C
00000000 68 00 65 00 6c 00 6c 00 6f 00 0a 00 |h.e.l.l.o...|
$ echo hello | iconv -f ascii -t utf-16le | od -t x1
0000000 68 00 65 00 6c 00 6c 00 6f 00 0a 00
問題は、「od」がエンディアンネスをどのように処理するかです。1バイトより大きい単位( -x
16 ビット ワードを表示)、実行中のシステムにネイティブなものがデフォルトになります。
おそらく、macOS はリトルエンディアンの Intel x86_64 CPU 上で実行されており、バイトは'od' によってデコードされると{0x68, 0x00}
実際に 16 ビットの数値を表します。0x0068