从格式化的字符串中打印Unicode

3
如何从格式化字符串中打印Unicode字符?使用以下示例,我遇到了一个错误(Python3):
 python -c 'print(u"\u{}".format("2665"))'
  File "<string>", line 1
SyntaxError: (unicode error) 'unicodeescape' codec can't decode bytes in position 0-1: truncated \uXXXX escape
2个回答

4
"\u{}"出现错误是因为字符串表示\unnnn不能与变量一起使用;它是一个文字,即一个立即值。就像你不能做x = 't'; print ('a\{}b'.format(x))并期望在ab之间有一个制表符。

要打印任何Unicode字符,可以将其字面代码直接输入到字符串本身中:

 print ('Hello \u2665 world')

结果:

Hello ♥ world

请注意,您不需要在字符串本身上使用u前缀;这是Python 2.x的习惯。如果您想在变量中提供字符值:

print ('Hello {:c} world'.format(0x2665))

其中 (1) :c 强制将值表示为字符,(2) 您需要指示该值本身是十六进制的。 (因为字符串表示形式 \unnnn 总是十六进制的。)


4

这有点尴尬,不过你可以使用原始字符串字面值、编码,然后再使用unicode_escape编码解码回来:

print(r"\u{}".format("2665").encode().decode('unicode_escape'))
#  ♥

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接