【问题标题】:How can I convert utf8 code number to unicode code number in Python3如何在 Python3 中将 utf8 码号转换为 unicode 码号
【发布时间】:2017-05-10 02:21:12
【问题描述】:

我想生成所有 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,쎂]

【问题讨论】:

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


    【解决方案1】:

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

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

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

    【讨论】:

    • 谢谢。我明白了。 Unicode U+c380 是代码点。 1100001110000000 (0xc380) 是使用 Unicode 代码点的 UTF-8 编码样式解码的字节数组。你的代码运行良好。非常感谢。
    【解决方案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")
    'À'
    

    【讨论】:

    • 非常感谢。我使用bytes()decode() 方法。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-24
    • 2010-11-28
    • 2012-11-01
    • 2018-07-03
    • 2019-05-05
    相关资源
    最近更新 更多