我想要一个包含来自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']
如何列出字符?
答案 0 :(得分:1)
要将字符从U-1200打印到U-1399,我会使用带有await
控制变量的for
循环。使用int
将数字转换为字符非常简单。
整数值0x1200(即十六进制的1200)可以转换为Unicode代码点U-1200,如下所示:chr()
。
类似于0x1201,0x1202,...... 0x1399。
请注意,我们使用chr(0x1200) == '\u1200'
过滤掉一些无用条目的代码。
.isprintable()
或
print(' '.join(chr(x) for x in range(0x1200, 0x139A) if chr(x).isprintable()))
请注意,代码示例需要Python3。
答案 1 :(得分:-1)
您发布的代码根本不会产生任何错误:
>>> [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
那个字符串,你会看到正确的字符。
String and Bytes literals中记录了\U
和\u
转义(以及其他转义)的完整详细信息(请务必切换到您实际使用的Python版本,因为细节可能不同,特别是在2.x和3.x之间),但通常你不需要知道比上面解释的更多。