以下代码:
print('N{WAVING BLACK FLAG}')
尽可能简单。然而,在一些机器上,它按预期打印字符,在另一些机器上,它引发一个UnicodeEncodeError
,并发出一条消息'ascii' codec can't encode character 'U0001f3f4' in position 0: ordinal not in range(128)
。
为什么打印字符有时会导致UnicodeEncodeError
?文档中没有提到任何编码。是否有任何方法可以确保字符串将被打印而不会引发任何异常?
我成功地分离了一个可重复的例子:
import subprocess
import sys
subprocess.run([sys.executable, 'test.py'], env=dict())
test.py
只包含上面提到的单个打印语句。这个例子在所有被测试的机器上引发一个UnicodeEncodeError
…但只有在Python3.6
测试时。当用Python3.7
测试时,它按预期打印字符。
如果您的区域设置在3.6和3.7上的测试中是相同的,这可能是由于PEP538从python 3.7开始生效
PEP538强制C语言环境为UTF-8。