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

11 投票
4 回答
34619 浏览
提问于 2025-04-15 16:47

我有一组UTF-8的字节,想把它们转换回Unicode编码点。请问我该怎么在Python中做到这一点呢?

比如说,UTF-8字节['0xc5','0x81']应该转换成0x141这个编码点。

4 个回答

3

在编程中,有时候我们需要处理一些数据,可能会用到数组。数组就像一个盒子,可以装很多东西,比如数字、字母等等。我们可以通过索引来访问这些东西,索引就像是盒子里的每个小格子,编号从0开始。

当我们想要从数组中取出某个特定的值时,可以使用这个索引来找到它。例如,如果我们有一个包含数字的数组,想要获取第一个数字,就可以用索引0来访问。

有时候,我们还需要对数组进行一些操作,比如添加新的元素、删除某个元素或者排序。添加元素就像在盒子里放入新的东西,删除元素就像把不需要的东西拿出来,而排序则是把盒子里的东西按顺序排列好。

总之,数组是一个非常有用的工具,可以帮助我们更好地管理和处理数据。

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

在美好的3.x版本中,所有的str都是Unicode格式,而bytes则是以前str的样子:

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

这就是你想要的。

17

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'

撰写回答