将十六进制 Shift-JIS 转换为字符

将十六进制 Shift-JIS 转换为字符

我正在寻找将 Shift-JIS 的十六进制值转换为 Unix/Linux 命令行中的字符的方法。

Shift-JIS 代码表可以在这里找到

为了:

82 ae (0x82ae)

我希望:

我知道这是有可能的ascii2uninkf但我有点陷入困境。

笔记:我可以这样做但这不是预期的结果:

echo "0x82BE" | ascii2uni -a X | nkf -S
Result is: 1 token converted
闃セ

找到这个主题这表明使用iconv但使用该方法最终得到了相同的结果?

你们能帮忙吗?

答案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

相关内容