【问题标题】:Caveats of printing unicode characters in Python在 Python 中打印 unicode 字符的注意事项
【发布时间】:2022-12-12 23:25:57
【问题描述】:

以下代码:

print('\N{WAVING BLACK FLAG}')

尽可能简单。然而,在某些机器上,它会按预期打印字符,而在其他机器上,它会引发 UnicodeEncodeError 和一条消息 'ascii' codec can't encode character '\U0001f3f4' in position 0: ordinal not in range(128)

为什么打印一个字符可以有时导致UnicodeEncodeErrordocumentation 中没有提及任何编码。有什么方法可以确保在不引发任何异常的情况下打印字符串?


我设法隔离了一个可重现的例子:

import subprocess
import sys
subprocess.run([sys.executable, 'test.py'], env=dict())

test.py 仅包含上面提到的单个打印语句。此示例在所有测试机器上引发 UnicodeEncodeError...但仅当使用 Python 3.6 测试时。当使用 Python 3.7 测试时,它会按预期打印字符。

【问题讨论】:

  • Python 本身无法真正控制它;如果您在强制以某种方式使用 ASCII 打印内容的地方运行它,则无法打印非 ASCII。我的直觉是你在 Windows 上,但可能有一些方法可以强制环境只支持 ASCII,例如在某些 IDE 中。

标签: python unicode


【解决方案1】:

如果您的区域设置对于 3.6 和 3.7 的测试是相同的,这可能是由于 PEP538 从 python 3.7 开始生效

PEP538 将 C 语言环境强制为 UTF-8。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-02-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-25
    • 1970-01-01
    • 2018-06-22
    相关资源
    最近更新 更多