将UTF-8八位字节转换为Unicode码点
我有一组UTF-8的字节,想把它们转换回Unicode编码点。请问我该怎么在Python中做到这一点呢?
比如说,UTF-8字节['0xc5','0x81']应该转换成0x141这个编码点。
4 个回答
在编程中,有时候我们需要处理一些数据,可能会用到数组。数组就像一个盒子,可以装很多东西,比如数字、字母等等。我们可以通过索引来访问这些东西,索引就像是盒子里的每个小格子,编号从0开始。
当我们想要从数组中取出某个特定的值时,可以使用这个索引来找到它。例如,如果我们有一个包含数字的数组,想要获取第一个数字,就可以用索引0来访问。
有时候,我们还需要对数组进行一些操作,比如添加新的元素、删除某个元素或者排序。添加元素就像在盒子里放入新的东西,删除元素就像把不需要的东西拿出来,而排序则是把盒子里的东西按顺序排列好。
总之,数组是一个非常有用的工具,可以帮助我们更好地管理和处理数据。
l = ['0xc5','0x81']
s = ''.join([chr(int(c, 16)) for c in l]).decode('utf8')
s
>>> u'\u0141'
在美好的3.x版本中,所有的str
都是Unicode格式,而bytes
则是以前str
的样子:
>>> s = str(bytes([0xc5, 0x81]), 'utf-8')
>>> s
'Ł'
>>> ord(s)
321
>>> hex(ord(s))
'0x141'
这就是你想要的。
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')
'Ł'
...或者你也可以在bytes
对象上调用.decode('utf-8')
来进行转换:
>>> b'\xc5\x81'.decode('utf-8')
'Ł'
>>> hex(ord('Ł'))
'0x141'
Pre-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'
...或者你也可以在str
上调用.decode('utf-8')
来进行转换:
>>> '\xc5\x81'.decode('utf-8')
u'\u0141'