【发布时间】:2020-05-15 07:57:54
【问题描述】:
这里有很多 unicode 映射中的字符串。
unicode_strings = ["\U00000{:0>3}".format(str.upper(hex(i))[2:]) for i in range(16)]
但此代码会发出错误消息。
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-6: truncated \UXXXXXXXX escape
这是因为评估顺序造成的。
首先,评估“\U00000”,其次,执行format。
作为错误信息,unicode字符必须是“\UXXXXXXXXXX”的块。
Unicode 字符在第一次被评估,但这不是当时合适的块。
format函数执行时,unicode字符必须构造完整。
我知道大写字符串 'r' 可以转义此错误消息,但它不会生成 unicode 字符串。
我应该如何将“\U”附加到字符串或第一次执行格式化函数?
如果我删除'\U',结果是乌托邦。
['00000001',
'00000002',
'00000003',
'00000004',
'00000005',
'00000006',
'00000007',
'00000008',
'00000009',
'0000000A',
'0000000B',
'0000000C',
'0000000D',
'0000000E',
'0000000F']
更新: 我想要这样的结果。
['\U00000001',
'\U00000002',
'\U00000003',
'\U00000004',
'\U00000005',
'\U00000006',
'\U00000007',
'\U00000008',
'\U00000009',
'\U0000000A',
'\U0000000B',
'\U0000000C',
'\U0000000D',
'\U0000000E',
'\U0000000F']
我想获取 Unicode 映射中的字符序列。
【问题讨论】:
-
list(map(chr, range(16)))不会产生您想要的输出吗? -
那么你想要的输出是什么?
-
@schwobaseggl 你的意思是
def m(i): return ["\U00000{:0>3}".format(str.upper(hex(i))[2:])] list(map(m, range(16)))?我认为这会导致同样的错误。 -
不,我的 sn-p 替换了整个理解:
unicode_strings = list(map(chr, range(16))) -
另请注意。您不会看到它表示为
'\U00000001',而是'\x01',它们都表示相同的字符。print(["\U00000001"])->['\x01']
标签: python python-3.x string unicode format