You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.17 02:24:54