iconv 和 od 如何处理字节顺序?

iconv 和 od 如何处理字节顺序?
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-16utf-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 系统以相反的方式配置。我认为这并没有什么真正的理由。也许这是一些奇怪的遗留问题或编译配置错误。有没有提到这一刻的文档?

相关内容