[Linux] 如何 hex 字串 與 文字互轉
同事在處理編解碼的問題
拿了個字串 "5F20",說它是 "张" 這個字
一看就大概猜到是 UTF16
可是怎麼得到答案呢?
實在不想寫程式,就直接透過 shell 指令來試試看
然後找到 xxd 這個指令
因為是 utf16,所以就算透過 xxd 得到後,也要再透過 iconv 由 utf16 轉回到 utf8
xxd 預設吃的順序是 FFFE(小尾序,代表第二 byte 先讀)
所以原來的 5F20 要改成 205F
那自己加上 BOM "FEFF" 讓它變成大尾序呢?
答案是可以的
原來的 "205F" 和 "FFFE205F" 結果是相同的
也可以由文字反查出 utf16 字串,但終端機的文字還是必須由 utf8 轉為 utf16
得到的結果,就看到前面的 fffe ,代表了是小尾序
如果用 hexdump ,則會得到大尾序的結果
延伸:
如何還原 8 bit 字串
拿了個字串 "5F20",說它是 "张" 這個字
一看就大概猜到是 UTF16
可是怎麼得到答案呢?
實在不想寫程式,就直接透過 shell 指令來試試看
然後找到 xxd 這個指令
因為是 utf16,所以就算透過 xxd 得到後,也要再透過 iconv 由 utf16 轉回到 utf8
$echo "205F" | xxd -r -p|iconv -f utf16 -t utf8
张
xxd 預設吃的順序是 FFFE(小尾序,代表第二 byte 先讀)
所以原來的 5F20 要改成 205F
那自己加上 BOM "FEFF" 讓它變成大尾序呢?
$echo "feff5F20" | xxd -r -p|iconv -f utf16 -t utf8
张
答案是可以的
原來的 "205F" 和 "FFFE205F" 結果是相同的
$echo "FFFE205F" | xxd -r -p|iconv -f utf16 -t utf8
张
也可以由文字反查出 utf16 字串,但終端機的文字還是必須由 utf8 轉為 utf16
$echo "张"|iconv -f utf8 -t utf16|xxd
0000000: fffe 205f 0a00
得到的結果,就看到前面的 fffe ,代表了是小尾序
如果用 hexdump ,則會得到大尾序的結果
$echo "张"|iconv -f utf8 -t utf16|hexdump
0000000 feff 5f20 000a
0000006
延伸:
如何還原 8 bit 字串
留言