Unicode

iconv 和 od 如何處理字節序?

  • July 21, 2020
echo hello | iconv -f ascii -t utf-16le | od -x

產生在我看來像大端的結果

0068    0065    006c    006c    006f    000a

而沒有’le’的同一行在utf16le系統(Osx)上產生

echo hello | iconv -f ascii -t utf-16 | od -x

fffe    6800    6500    6c00    6c00    6f00    0a00

od -x 會改變字節順序嗎?

od似乎沒有改變任何東西,但iconv確實如此。根據您的輸出,該系統映射utf-16utf-16be. 與我在 x86-64 上的 Ubuntu 的輸出進行比較:

$迴聲你好| 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 | od -x
0000000 0068 0065 006c 006c 006f 000a
0000014
$迴聲你好| 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 | od -x
0000000 6800 6500 6c00 6c00 6f00 0a00
0000014

可以呼叫od -t x1而不是hd使用類似的輸出:

$迴聲你好| 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 使用 BOM 將 utf-16 映射到 utf-16le:

$迴聲你好| iconv -f ascii -t utf-16 | od -x
0000000 feff 0068 0065 006c 006c 006f 000a
0000016
$迴聲你好| iconv -f ascii -t utf-16 | 高畫質
00000000 ff fe 68 00 65 00 6c 00 6c 00 6f 00 0a 00 |..你好..|
0000000e

這很有趣,為什麼您的 OS X 系統配置相反。我認為沒有真正的原因;也許這是一些奇怪的遺留或編譯配置錯誤。它是否有提到這一刻的文件?

引用自:https://unix.stackexchange.com/questions/599582