获取国际字符的UTF-8编码十六进制值



使用Mac OSX,如果有一个文件用UTF-8编码(除了ASCII之外还包含国际字符),想知道我们是否可以使用任何工具或简单命令(例如在Python 2.7或shell中)来查找相关的十六进制(base-16)值(以字节流为单位)?例如,如果我在文件中写入一些亚洲字符,我可以找到相关的十六进制值。

我目前的解决方案是打开文件,使用Python str逐字节读取。想知道是否有更简单的方法不需要编码。:)

编辑1,似乎od的输出不正确,

cat ~/Downloads/12
1
od ~/Downloads/12
0000000    000061
0000001

编辑2,也尝试了od -t x1选项,

od -t x1 ~/Downloads/12
0000000    31
0000001

提前感谢,Lin

我不确定您到底想要什么,但这个脚本可以帮助您查找任何字符的Unicode代码点和UTF-8字节序列。请确保将源文件另存为UTF-8。

# coding: utf8
s = u'我是美国人。'
for c in s:
    print c,'U+{:04X} {}'.format(ord(c),repr(c.encode('utf8')))

输出:

我 U+6211 'xe6x88x91'
是 U+662F 'xe6x98xaf'
美 U+7F8E 'xe7xbex8e'
国 U+56FD 'xe5x9bxbd'
人 U+4EBA 'xe4xbaxba'
。 U+3002 'xe3x80x82'

od是正确的命令,但您需要指定一个可选参数-t x1:

$ od -t x1 ~/Downloads/12
0000000 31
0000001

如果您不希望看到文件偏移量,请尝试添加-A none:

$ od -A none -t x1 ~/Downloads/12
 31

此外,Linux手册页(但不是OS X手册页)列出了以下示例:od -A x -t x1z -v,"显示六进制转储格式输出"

参考:http://www.unix.com/man-page/osx/1/od/

您可以使用命令iconv在编码之间进行转换。基本命令是:

iconv -f from_encoding -t to_encoding inputfile

你可以看到支持的编码列表

iconv --list

在您的情况下,

iconv -f UTF8 -t UCS-2 inputfile

您还要求查看十六进制值。一个标准的实用程序是xxd。您可以通过管道将iconv的结果传输到xxd,如下所示:

iconv -f UTF8 -t UCS-2 inputfile | xxd  

最新更新