【问题标题】:How to list Amharic (Unicode) code points in python 3.6如何在 python 3.6 中列出阿姆哈拉语 (Unicode) 代码点
【发布时间】:2018-04-03 17:54:50
【问题描述】:

我想要一个包含来自 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']

如何列出字符?

【问题讨论】:

  • 您在此处粘贴的是与您所询问的完全不同的语法错误 - 有一个未关闭的 ',并且任何地方都没有 Unicode 转义。
  • 猜想,你混淆了\u\U。第一个需要 4 个十六进制数字,第二个需要 8 个十六进制数字。所以你可以使用\u1200\U00001200,但\U1200会尝试将接下来的4个字符视为4个数字,这将是一个错误。
  • 您编辑的版本中仍然没有任何 Unicode 转义序列,现在根本不会产生任何错误。
  • 附带说明,对打印等副作用使用列表推导并忽略结果是非常具有误导性且不习惯的。只需使用for 声明即可。

标签: python utf-8


【解决方案1】:

要打印从 U-1200 到 U-1399 的字符,我将使用带有 int 控制变量的 for 循环。使用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。

【讨论】:

  • 谢谢,解决了。你能解释一下0x1200是什么意思吗?我知道它代表 unicode 字符,但是数字是什么意思?我也更喜欢包含所有字符的列表作为输出,而不是单独打印每个字符。
  • 我在答案中添加了解释。我希望它有所帮助。
  • 成功了,我很感激。
【解决方案2】:

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

>>> [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 转义需要 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),但通常你不需要知道比上面解释的更多。

【讨论】:

    猜你喜欢
    • 2014-01-24
    • 2014-04-25
    • 1970-01-01
    • 2021-12-06
    • 1970-01-01
    • 1970-01-01
    • 2016-12-06
    • 1970-01-01
    • 2012-04-19
    相关资源
    最近更新 更多