HOWTO · Python

在 Python 中打印 Unicode 字符

本教程演示如何在 Python 中打印 unicode 字符

本页内容

Python 字符串可以直接包含 Unicode 字符,print() 会将这些字符写入标准输出。如果知道字符的十六进制码位或 Unicode 名称,可以用转义序列将其写入字符串、用 chr() 构造,或通过 unicodedata.lookup() 查找。

Unicode 码位写作 U+ 后接一个十六进制数。例如,U+2612 表示 ☒,U+7687 表示 皇。下面三种方法都会生成相同的字符串 ☒皇ÉÉ。

方法 1:使用 Unicode 转义序列

在 Python 字符串字面量中,\u 后面必须恰好跟四个十六进制数字,而 \U 后面跟八个。码位不超过 U+FFFF 时使用 \u;高于此范围时使用 \U。\U 形式开头多出的零属于八位数字格式的一部分。

运行以下示例:

unicode_text = "\u2612\u7687\u00C9\u00C9"
print(unicode_text)
☒皇ÉÉ

每个转义序列都会为字符串添加一个字符。Python 读取字符串字面量时会解析这些转义序列,因此打印出的文本是对应字符,而不是转义写法。

方法 2:使用 chr() 函数

如果代码中已有整数码位(例如从数据中读取的值),可以使用 chr()。它会将给定码位转换为只含一个字符的字符串;将这些字符串拼接起来即可得到更长的结果。

unicode_text = chr(0x2612) + chr(0x7687) + chr(0x00C9) + chr(0x00C9)
print(unicode_text)
☒皇ÉÉ

0x 前缀表示对应整数使用十六进制。生成的字符串可以像其他 Python 字符串一样使用。

方法 3:使用 Unicode 名称

如果字符名称比数字更容易记住,可以使用 Python 标准 unicodedata 模块中的 unicodedata.lookup()。它会返回与指定 Unicode 名称完全匹配的字符。将返回的字符串拼接起来,再把结果传给 print():

import unicodedata

unicode_text = (
    unicodedata.lookup("BALLOT BOX WITH X")
    + unicodedata.lookup("CJK UNIFIED IDEOGRAPH-7687")
    + unicodedata.lookup("LATIN CAPITAL LETTER E WITH ACUTE")
    + unicodedata.lookup("LATIN CAPITAL LETTER E WITH ACUTE")
)
print(unicode_text)
☒皇ÉÉ

请使用 Unicode 字符名称列表中列出的拼写。名称拼错或名称不存在时,查找就无法成功,因此使用前请先核对名称。

其他提示

  • 终端、编辑器或字体必须支持所选字符,才能按预期显示。如果输出看起来像方框或问号,请检查显示环境;字符串本身仍可能包含预期字符。
  • 需要查找码位或字符名称时,可以参考 Unicode 字符列表。十六进制数字的位数必须符合转义形式:\u 后四位,或 \U 后八位。
  • 如果文件和编辑环境能正确保留可见的 Unicode 字符,也可以直接将它们输入 Python 源文件。

结论

知道十六进制码位时使用转义序列;代码中已有整数值时使用 chr();手头有 Unicode 名称时使用 unicodedata.lookup()。这三种方式都会生成普通的 Python 字符串,print() 可以将其写入输出。