代码之家  ›  专栏  ›  技术社区  ›  Kaleab Woldemariam

如何在python 3.6中列出阿姆哈拉语(Unicode)代码点

  •  -2
  • Kaleab Woldemariam  · 技术社区  · 7 年前

    我想要一个包含utf-8中阿姆哈拉语字母的列表。字符范围从U+1200到U+1399。我正在使用windows 8。我遇到了 SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-5: truncated \UXXXXXXXX escape

    我试过这个: [print(c) for c in u'U1399']

    如何列出字符?

    2 回复  |  直到 7 年前
        1
  •  2
  •   Robᵩ    7 年前

    要打印从U-1200到U-1399的字符,我将使用 for 循环使用 int 控制变量。使用 chr()

    整数值0x1200(即十六进制中的1200)可以转换为Unicode代码点U-1200,如下所示: chr(0x1200) == '\u1200'

    类似于0x1201、0x1202。。。0x1399。

    请注意,我们使用 .isprintable() 过滤掉一些无用的条目。

    print(' '.join(chr(x) for x in range(0x1200, 0x139A) if chr(x).isprintable()))
    

    for x in range(0x1200, 0x139A):
        if chr(x).isprintable():
            print(hex(x), chr(x))
    

    请注意,代码示例需要Python3。

        2
  •  -1
  •   abarnert    7 年前

    您发布的代码根本不会产生任何错误:

    >>> [print(c) for c in u'U1399']
    U
    1
    3
    9
    9
    [None, None, None, None, None]
    

    它也没有任何非ASCII字符。

    您可能想使用Unicode反斜杠转义。你的问题可能更像这样:

    >>> u'\U1399'
    SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-5: truncated \UXXXXXXXX escape
    

    原因是由于错误消息意味着 \U escape需要8个十六进制数字,而您只提供了4个。因此:

    >>> u'\U00001399'
    '᎙'
    

    但有不同的逃跑顺序 \u (注意小写字母 u ),只需要4位数字:

    >>> u'\u1399'
    '᎙'
    

    如果您使用的是Python 2.7,甚至可能是Windows上的Python 3,您可能看不到很好的输出,但相反,其中会出现反斜杠转义。但如果你 print 该字符串,您将看到正确的字符。

    的完整详细信息 \U型 \u型 逃逸(和其他逃逸)记录在 String and Bytes literals (请确保切换到您实际使用的Python版本,因为细节可能会有所不同,尤其是在2.x和3.x之间),但通常您不需要知道比上面解释的更多的内容。