如何在Python3中将utf8代码编号转换为unicode代码编号

时间:2017-05-10 02:21:12

标签: python python-3.x unicode utf-8

我想生成所有utf8字符列表。 我在下面编写了代码,但它没有成功。 我认为,因为chr()期望unicode号,但我给了utf8代码。 我想我必须将utf8代码转换为unicode代码,但我不知道如何。 我能怎么做?或者你知道更好的方法吗?

def utf8_2byte():
    characters = []
    # first byte range: [C2-DF]
    for first in range(0xC2, 0xDF + 1):
        # second byte range: [80-BF]
        for second in range(0x80, 0xBF + 1):
            num = (first << 8) + second
            line = [hex(num), chr(num)]
            characters.append(line)
    return characters

我期待:

# UTF8 code number, UTF8 character
[0xc380,À]
[0xc381,Á]
[0xc382,Â]

实际上:

[0xc380,쎀]
[0xc381,쎁]
[0xc382,쎂]

2 个答案:

答案 0 :(得分:2)

在python 3中,chr采用unicode代码点,而不是utf-8U+C380位于韩文范围内。相反,您可以使用bytearray进行解码

>>> bytearray((0xc3, 0x80)).decode('utf-8')
'À'

还有其他方法,例如structctypes。任何组装本机字节并将它们转换为bytes的东西都可以。

答案 1 :(得分:2)

Unicode是一个字符集,而UTF-8是一种编码,它是一种算法,用于将代码点从Unicode编码为机器级别的字节,反之亦然。

代码点0xc380在Unicode标准中是

使用UTF-8编码解码时,0xc380字节为À

>>> s = "쎀"
>>> hex(ord(s))
'0xc380'
>>> b = bytes.fromhex("C3 80")
>>> b
b'\xc3\x80'
>>> b.decode("utf8")
'À'
>>> bytes((0xc3, 0x80)).decode("utf8")
'À'