是否有将 UTF-8 值转换为 Unicode 值的命令行方法?

是否有将 UTF-8 值转换为 Unicode 值的命令行方法?

$ 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 a5e28ca5转换为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. 将字符串重新打包成字节序列1
  2. 解码字节序列为 UTF-8 字符
  3. 编码结果为 UTF-16be
  4. 解压它以获取十六进制代码点

所以

$ printf '%s' 'e28ca5' | perl -MEncode=encode,decode -nE '
    say unpack("H*", encode("UTF-16be", decode("UTF-8", pack("H*",$_))))
'
2325

  1. 此步骤只需要,因为您已经解压了它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

相关内容