Python中打印字典/列表时如何显示实际Unicode字符?
关于Python字典打印时特殊字符显示问题的解答
咱们一步一步来拆解你遇到的问题:
为什么会出现这种显示差异?
1. 直接打印变量a时正常显示
当你直接打印字符串变量a的时候,Python会调用字符串的__str__()方法——这个方法的设计目标就是返回人类友好可读的字符串形式,所以像™这种Unicode字符会直接渲染显示出来。
2. 打印字典di时显示转义序列
而打印字典时,Python会调用字典的__str__()方法,这个方法内部会对字典里的每个元素调用__repr__()方法。字符串的__repr__()方法返回的是字符串的“官方”表示形式——也就是能用来重新创建这个字符串的格式,所以会把非ASCII字符转换成对应的Unicode转义序列(比如\xe2\x84\xa2就是™的UTF-8字节编码),确保在任何环境下都能准确表达字符串的原始内容。
3. 打印di["k"]时又正常显示
这时候你是直接取出了字典里的字符串值,和直接打印a的逻辑完全一致,Python调用的还是字符串的__str__()方法,所以™又能正常显示了。
怎么让打印字典时直接显示正确符号?
给你几个实用的解决方法:
方法1:用json.dumps()输出
JSON格式天然支持Unicode字符,借助json模块可以轻松实现需求:
import json a = 'abc ™ def' di = {"k":a} print(json.dumps(di, ensure_ascii=False))
输出结果:{"k": "abc ™ def"}
方法2:手动遍历格式化输出
如果不想引入额外模块,可以自己遍历字典键值对,用友好格式打印:
a = 'abc ™ def' di = {"k":a} print("{") for key, value in di.items(): print(f" '{key}': '{value}',") print("}")
输出效果:
{ 'k': 'abc ™ def', }
方法3:自定义字典类(进阶)
如果需要频繁处理这类场景,可以自定义一个字典类,重写它的__str__()方法:
class FriendlyDict(dict): def __str__(self): items = [f"'{k}': '{v}'" for k, v in self.items()] return "{" + ", ".join(items) + "}" a = 'abc ™ def' di = FriendlyDict({"k":a}) print(di)
直接打印di就会输出:{'k': 'abc ™ def'}
内容的提问来源于stack exchange,提问作者Avtar Singh
相关产品推荐
相关产品推荐

