![哪个程序(十六进制编辑器)可以将十六进制代码字符串转换为unicode?](https://linux22.com/image/1142401/%E5%93%AA%E4%B8%AA%E7%A8%8B%E5%BA%8F%EF%BC%88%E5%8D%81%E5%85%AD%E8%BF%9B%E5%88%B6%E7%BC%96%E8%BE%91%E5%99%A8%EF%BC%89%E5%8F%AF%E4%BB%A5%E5%B0%86%E5%8D%81%E5%85%AD%E8%BF%9B%E5%88%B6%E4%BB%A3%E7%A0%81%E5%AD%97%E7%AC%A6%E4%B8%B2%E8%BD%AC%E6%8D%A2%E4%B8%BAunicode%EF%BC%9F.png)
假设我有一个以 Json 形式返回的字符串,例如
004100610061
是字符串。但如果将其解释为十六进制,然后解释为 Unicode,则意味着
Aaa
哪个十六进制编辑器可以提供解码功能?
使用 Bless 我可以粘贴十六进制,但看不到 Unicode。
答案1
你可以直接使用 xxd。例如:
xxd -r -p <(echo 004100610061)
当然,这不会增加额外的新行,因此您可能也想立即调用 echo,例如:
xxd -r -p <(echo 004100610061) ; echo
再次,也许疯狂的重定向让这些命令变得令人困惑,所以也许这样更容易理解它的作用:
echo 004100610061 | xxd -r -p ; echo
xxd 从 echo 读取输入,-r 表示从十六进制转储转回二进制,-p 表示忘记在十六进制转储中查找地址信息,然后 echo 插入一个额外的新行。因此,这些命令都只是 xxd 从标准输入读取其输入,将十六进制值转换回二进制,然后显示它们。
编辑:正如@Rudd 指出的那样,这只是二进制输出。您的终端可能会忽略不可打印的位并愚蠢地将其解释为 ascii,因此请在那里添加一些额外的字节并将输出重定向到文件以进行更准确的转换。
例如,如果你知道你的输入是 big endian utf-16:
echo feff004100610061 | xxd -r -p > output.txt
然后在支持unicode的编辑器中查看结果。
例如:
vim output.txt
对于其他编码 BOM,请参阅维基百科
答案2
在 Perl 中:
echo 004100610061 | perl -CS -pe 's/[0-9A-F]{4}/chr(hex($&))/egi'
输出:
Aaa
命令行选项-CS
强制输出采用 UTF-8 编码。
答案3
您可以退出安装附加软件并使用任何 Linux 发行版中集成的 Vi/Vim 编辑器。
Vi 替换(:s
)命令允许通过以下模式执行此操作:
:%s/\(\x\{4\}\)/\=nr2char('0x'.submatch(1),1)/g
简单:s
替换仅替换当前行,而:%s
替换所有行中的代码。
还有其他几种方法可以简化 Vim 中的 Unicode 表示,但它们需要插件或设置二合字母。
笔记:对于上述实现,您需要功能齐全的 VIM,而不是 VIM-tiny。此nr2char
参数仅在 7.4 版及以上版本有效,如果您的 VIM 版本较低,则可以将此参数放在一边,这不会对功能产生任何影响。