我想生成所有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,쎂]
答案 0 :(得分:2)
在python 3中,chr
采用unicode代码点,而不是utf-8
。 U+C380
位于韩文范围内。相反,您可以使用bytearray
进行解码
>>> bytearray((0xc3, 0x80)).decode('utf-8')
'À'
还有其他方法,例如struct
或ctypes
。任何组装本机字节并将它们转换为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")
'À'