在Python中打印unicode字符的注意事项



以下代码:

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。

最新更新