【发布时间】: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)。
为什么打印一个字符可以有时导致UnicodeEncodeError?documentation 中没有提及任何编码。有什么方法可以确保在不引发任何异常的情况下打印字符串?
我设法隔离了一个可重现的例子:
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 中。