我有一组UTF-8八位字节,我需要将它们转换回unicode代码点。我怎么能在python中做到这一点。
e.g。 UTF-8八位字节['0xc5','0x81']应转换为0x141代码点。
答案 0 :(得分:14)
在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之前,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,而bytes
是str
曾经是:
>>> 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'