Python中Unicode字符打印异常:不同打印方式为何结果不同?
Python Unicode字符打印差异的原因
核心原因是不同打印方式调用了Python对象的不同字符串表示方法:
- 当你打印列表(
print(lista))时,Python会输出列表的__repr__()结果。这个方法的设计目标是让输出内容可直接作为Python代码复用,因此对于私有使用区(PUA)的Unicode字符(比如\ue001这类U+E000至U+F8FF范围内的字符),会显示其Unicode转义序列而非字符本身;而标准Unicode字符(如\u23fb)的repr()会直接显示字符。 - 当你使用
print(*lista)、单独打印单个字符(print("\ue001")),或者循环中直接打印元素(for char in lista: print(char))时,Python会调用__str__()方法。这个方法的目标是生成人类可读的字符串,会直接输出字符本身,只要你的终端支持该字符的渲染,就能正常显示。
验证示例
执行以下代码可以清晰看到两种方法的差异:
char = "\ue001" print(repr(char)) # 输出 '\ue001',对应列表打印时的表现 print(str(char)) # 输出字符本身,对应print(*lista)的表现
补充说明
私有使用区(PUA)的Unicode字符没有被标准Unicode联盟分配具体字符定义,通常由厂商或自定义场景使用。Python的repr()对这类字符默认输出转义序列,而str()则直接输出字符编码对应的字形,能否正常显示取决于终端是否有对应字形的字体支持。
内容的提问来源于stack exchange,提问作者Borolo222
相关产品推荐
相关产品推荐

