$ od -t x1 <inputfile
生产… 0a e2 8c a5 0a …
。
是0a
换行符,e2 8c a5
是 Unicode 字符的 UTF-8 表示形式。
对于这个简单的情况,我可以手动完成:
[1110]0010 [10]001100 [10]100101 = 10 0011 0010 0101 = 2 3 2 5
哪个 shell 命令行可以将e2 8c a5
或e28ca5
转换为2325
?
(为了完整性,了解其他方式的转换也是很好的。)
答案1
尝试这个命令行来获得你想要的东西,“2325”,
$ <<<'e28ca5' xxd -r -p | iconv -t unicode | hexdump
0000000 feff 2325
0000004
另请参阅命令行第一部分的输出
<<<'e28ca5' xxd -r -p
(没有换行符,因此提示符直接出现在输出之后),
sudodus@c30 ~ $ <<<'e28ca5' xxd -r -p
⌥sudodus@c30 ~ $
正如您所看到的,我⌥
在 gnome-terminal 窗口中看到了那个特殊字符。
答案2
使用 Perl编码模块,你可以
- 将字符串重新打包成字节序列1
- 解码字节序列为 UTF-8 字符
- 编码结果为 UTF-16be
- 解压它以获取十六进制代码点
所以
$ printf '%s' 'e28ca5' | perl -MEncode=encode,decode -nE '
say unpack("H*", encode("UTF-16be", decode("UTF-8", pack("H*",$_))))
'
2325
此步骤只需要,因为您已经解压了它
od
- 如果您从字符本身或字节序列开始,那么您只需要解码编码:$ printf '⌥' | perl -MEncode=encode,decode -nE ' say unpack("H*", encode("UTF-16be", decode("UTF-8", $_))) ' 2325
或者
$ printf '\xe2\x8c\xa5' | perl -MEncode=encode,decode -nE ' say unpack("H*", encode("UTF-16be", decode("UTF-8", $_))) ' 2325
答案3
请尝试以下操作:
iconv -f utf8 -t ucs2 <inputfile | hexdump -v -e '/2 "%04x "'
因为inputfile
包含三个字节,并且e2 8c a5
其值输出2325
。