将UTF-8八位字节转换为unicode代码点

时间:2009-12-08 04:59:13

标签: python unicode utf-8

我有一组UTF-8八位字节,我需要将它们转换回unicode代码点。我怎么能在python中做到这一点。

e.g。 UTF-8八位字节['0xc5','0x81']应转换为0x141代码点。

4 个答案:

答案 0 :(得分:14)

Python 3.x:

在Python 3.x中,str是Unicode文本的类,bytes用于包含八位字节。

如果通过“八位字节”你真的是指'0xc5'形式的字符串(而不是'\ xc5'),你可以像这样转换为bytes

>>> bytes(int(x,0) for x in ['0xc5', '0x81'])
b'\xc5\x81'

然后,您可以使用str构造函数转换为str(即:Unicode)...

>>> str(b'\xc5\x81', 'utf-8')
'Ł'

...或致电.decode('utf-8')对象上的bytes

>>> b'\xc5\x81'.decode('utf-8')
'Ł'
>>> hex(ord('Ł'))
'0x141'

预3.x的:

在3.x之前,str类型是字节数组,unicode用于Unicode文本。

同样,如果通过“八位字节”你真的是指'0xc5'形式的字符串(而不是'\ xc5')你可以像这样转换它们:

>>> ''.join(chr(int(x,0)) for x in ['0xc5', '0x81'])
'\xc5\x81'

然后,您可以使用构造函数转换为unicode ...

>>> unicode('\xc5\x81', 'utf-8')
u'\u0141'

...或致电.decode('utf-8')上的str

>>> '\xc5\x81'.decode('utf-8')
u'\u0141'

答案 1 :(得分:6)

在可爱的3.x中,所有str都是Unicode,而bytesstr曾经是:

>>> s = str(bytes([0xc5, 0x81]), 'utf-8')
>>> s
'Ł'
>>> ord(s)
321
>>> hex(ord(s))
'0x141'

这就是你要求的。

答案 2 :(得分:3)

l = ['0xc5','0x81']
s = ''.join([chr(int(c, 16)) for c in l]).decode('utf8')
s
>>> u'\u0141'

答案 3 :(得分:1)

>>> "".join((chr(int(x,16)) for x in ['0xc5','0x81'])).decode("utf8")
u'\u0141'