从Python Unicode字符串获取UTF-8字符编码
我正在从命令行读取一个字符串,这个字符串是用UTF-8编码的韩文。我通过运行一个命令来获取这个字符串,命令如下:
<my_command> | od -t x1
执行这个命令后,我得到了:
0000000 ec a7 80 ec 97 ad 2f ea b5 ad ea b0 80 0a
0000016
这六个UTF-8字符是 {eca780}{ec97ad}{2f}{eab5ad}{eab080}{0a}
,然后我在Python中使用以下代码来读取它:
utf8_str = unicode(text_from_the_cl, encoding='utf-8')
我想做的就是能够看到我读取的字符串对应的UTF-8字符编码。比如像 \uc9c0\uc5ed/\uad6d\uac00
这样的格式就很好。这只是为了检查它们是否被正确读取。
(我还要指出,这里使用的是Python 2.6.x - 我对此没有控制权)
2 个回答
1
使用 encode
方法:
utf8_str.encode('utf8')
需要注意的是,utf8_str
这个变量名其实不太好。原始的字节序列是用 UTF-8 编码来表示 Unicode 字符的;而调用 unicode
方法是把这些字符“解码”成实际的 Unicode 代码点。要把字节再拿回来,你只需要把这些代码点重新编码成 UTF-8 就可以了。
1
如果你想检查你的 unicode
字符串的内容,可以使用 repr()
函数:
>>> from binascii import unhexlify
>>> unhexlify(''.join('ec a7 80 ec 97 ad 2f ea b5 ad ea b0 80 0a'.split()))
'\xec\xa7\x80\xec\x97\xad/\xea\xb5\xad\xea\xb0\x80\n'
>>> print unhexlify(''.join('ec a7 80 ec 97 ad 2f ea b5 ad ea b0 80 0a'.split())).decode('utf8')
지역/국가
>>> print repr(unhexlify(''.join('ec a7 80 ec 97 ad 2f ea b5 ad ea b0 80 0a'.split())).decode('utf8'))
u'\uc9c0\uc5ed/\uad6d\uac00\n'
使用 repr()
得到的 unicode
值的结果,对于那些不是 ASCII 字符和不是 Latin1 字符的内容,会用 \uhhhh
这样的格式来表示;而对于 Latin1 字符和一些不可打印的字符,则会用 \xhh
这样的格式。