Python中自定义Unicode字符打印元组/数组时显示编码而非字体的问题
问题原因与解决方法
这不是Python的问题,是容器对象(元组、列表)和单个字符串的字符串表示逻辑差异导致的:
- 直接打印单个字符时,Python调用对象的
__str__()方法,输出字符的直观展示形式。 - 打印元组、列表这类容器时,Python会调用每个元素的
__repr__()方法——这个方法的设计目的是生成可用于调试或重构对象的字符串,因此会对非标准ASCII字符(哪怕是合法Unicode码点)转成\uXXXX的转义形式。
解决方法
方法1:手动遍历容器元素并格式化输出
不直接打印容器,自行拼接元素的字符串形式,模拟原生容器的输出格式:
my_tuple = ("a", "") print(f"({', '.join(map(str, my_tuple))})") # 输出: (a, ) my_array = ["a", ""] print(f"[{', '.join(map(str, my_array))}]") # 输出: [a, ]
这里用map(str, ...)把每个元素转成str展示形式,再用join拼接成符合容器格式的字符串。
方法2:自定义容器类重写__repr__
如果需要频繁使用这类容器,可以子类化tuple或list,重写__repr__方法,强制用str逻辑展示元素:
class PrintableTuple(tuple): def __repr__(self): return f"({', '.join(map(str, self))})" class PrintableList(list): def __repr__(self): return f"[{', '.join(map(str, self))}]" my_tuple = PrintableTuple(("a", "")) print(my_tuple) # 输出: (a, ) my_array = PrintableList(["a", ""]) print(my_array) # 输出: [a, ]
方法3:使用JSON序列化输出
借助json模块,设置ensure_ascii=False可以直接输出字符(注意输出为JSON格式字符串):
import json my_tuple = ("a", "") print(json.dumps(my_tuple)) # 输出: ["a",""] my_array = ["a", ""] print(json.dumps(my_array)) # 输出: ["a",""]
内容的提问来源于stack exchange,提问作者Torben Nordtorp
相关产品推荐
相关产品推荐

