从Python Unicode字符串获取UTF-8字符编码

2 投票
2 回答
3718 浏览
提问于 2025-04-18 17:00

我正在从命令行读取一个字符串,这个字符串是用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 这样的格式。

撰写回答