print() unicode 字符时 python 3.5 与 3.6 的差异?

differences in python 3.5 vs 3.6 when print() unicode charcters?

我的 python 文件:

print('Amanhã')

我在 VSCode 1.28.1 和 Windows 10 Pro 上使用集成终端。

当我激活基于 Python 3.6 的虚拟环境然后 运行 这个脚本时,它按预期执行并且我在终端中看到 Amanhã

但是当我激活基于 Python 3.5 的虚拟环境然后 运行 这个脚本时,它失败并出现 UnicodeEncodeError: UnicodeEncodeError: 'charmap' codec can't encode character '\xe3' in position 5: character maps to <undefined>

如果我运行set PYTHONIOENCODING=utf8在基于3.5的环境下,然后执行脚本,Unicode错误没有了但是输出并不完全符合预期:Amanh├ú

如何在基于 3.5 的 venv 中看到 Amanhã

(我在正常的 Windows 终端(cmd.exe)中复制了这个,而不是在 VSCode 中——完全相同的结果。我还会注意到 sys.getdefaultencoding() returns utf-8set PYTHONIOENCODING=utf8 命令之前和之后)

根据不正确的输出,您的终端正在使用 cp437,它不支持字符 ã

Pre-Python 3.6,Python将Unicode编码为Windows上终端的编码。从 Python 3.6 开始,Python 在写入终端时使用 Unicode Win32 API,正如您所发现的那样,效果更好。

如果您必须使用 Python 3.5,请查看 win-unicode-console