答案1
基于Unix 和 Linux Stack Exchange 网站上的这个答案,recode
在 Ubuntu 12.04.5 (LTS) 上对我来说运行得很顺畅:
echo -n 0x82ae | recode SHIFT-JIS/x4..UTF-8
当然,这会将十六进制代码的输出从 Shift-JIS 转换为 UTF-8,但哎呀……现在所有孩子都在使用 UTF-8。但您可以像..UTF-8
这样删除这些内容,输出应该是纯 Shift-JIS:
echo -n 0x82ae | recode SHIFT-JIS/x4
要确认它正确转换为 UTF-8,您可以将其传输到xxd
像这样:
echo -n 0x82ae | recode SHIFT-JIS/x4..UTF-8 | xxd -p -u
检查结果为E38190
匹配与此处显示的 UTF-8 字符完全相同. Shift-JIS 到 UTF-8 转换映射的完整表格可以在这里找到。
或者您可以直接xxd
从命令行运行如下命令来获取您想要的任何字符或一系列字符的精确十六进制代码:
echo -n "ぐ" | xxd -p -u
答案2
您的文件不包含您认为的二进制文件。ascii2uni
没有按照您期望的方式进行编码;我不确定为什么。
echo "0x82BE" | ascii2uni -a X > test1
od -tx1 test1
0000000 e8 8a be 0a
(请注意,这echo -n
起到了同样的作用。换行符0a
来自ascii2uni
,而不是echo
。)
将其转换为iconv
:
iconv -f SHIFT-JIS -t UTF-8 test1 > test2
od -tx1 test2
0000000 e9 97 83 ef bd be 0a
cat test2
闃セ
这就是你得到的。(另请注意,在你的 ascii2uni 示例中,你得到的82BE
是 ,即 Shift-JIS 中的 だ ,而不是原来的0x82ae
,即 ぐ 。我会坚持使用82BE
。)
问题在于二进制文件从一开始就不正确。请按如下方式操作:
echo -en '\x82\xbe' > test3
od -tx1 test3
0000000 82 be
iconv -f SHIFT-JIS -t UTF-8 test3 > test4
od -tx1 test4
0000000 e3 81 a0
cat test4
だ