echo hello | iconv -f ascii -t utf-16le | od -x
产生在我看来像是大尾数的结果
0068 0065 006c 006c 006f 000a
而在 utf16le 系统 (Osx) 上,没有 'le' 的同一行会生成
echo hello | iconv -f ascii -t utf-16 | od -x
fffe 6800 6500 6c00 6c00 6f00 0a00
od -x 会改变字节序吗?
答案1
od
似乎没有改变任何东西,但iconv
确实如此。根据您的输出,该系统映射utf-16
到utf-16be
.与我的 Ubuntu 在 x86-64 上的输出进行比较:
$ 回声你好 | iconv -f ascii -t utf-16le | iconv -f ascii -t utf-16le | iconv -f ascii -t utf-16le高清 00000000 68 00 65 00 6c 00 6c 00 6f 00 0a 00 |你好..| 0000000c $ 回声你好 | iconv -f ascii -t utf-16le | iconv -f ascii -t utf-16le | iconv -f ascii -t utf-16le OD-x 0000000 0068 0065 006c 006c 006f 000a 0000014 $ 回声你好 | iconv -f ascii -t utf-16be | iconv -f ascii -t utf-16be | iconv -f ascii -t utf-16be高清 00000000 00 68 00 65 00 6c 00 6c 00 6f 00 0a |.你好。| 0000000c $ 回声你好 | iconv -f ascii -t utf-16be | iconv -f ascii -t utf-16be | iconv -f ascii -t utf-16be OD-x 0000000 6800 6500 6c00 6c00 6f00 0a00 0000014
人们可以调用od -t x1
而不是hd
使用类似的输出:
$ 回声你好 | iconv -f ascii -t utf-16be | iconv -f ascii -t utf-16be | iconv -f ascii -t utf-16be OD-t x1 0000000 00 68 00 65 00 6c 00 6c 00 6f 00 0a 0000014
它就像hd
但没有 ASCII 列。
但我的 Ubuntu 将 utf-16 映射到带有 BOM 的 utf-16le:
$ 回声你好 | iconv -f ascii -t utf-16 | iconv -f ascii -t utf-16 | iconv -f ascii -t utf-16 OD-x 0000000 效果 0068 0065 006c 006c 006f 000a 0000016 $ 回声你好 | iconv -f ascii -t utf-16 | iconv -f ascii -t utf-16 | iconv -f ascii -t utf-16高清 00000000 ff fe 68 00 65 00 6c 00 6c 00 6f 00 0a 00 |..你好..| 0000000e
有趣的是,为什么你的 OS X 系统以相反的方式配置。我认为这并没有什么真正的理由。也许这是一些奇怪的遗留问题或编译配置错误。有没有提到这一刻的文档?