print()unicode字符时python 3.5 vs 3.6的区别?

时间:2018-10-12 04:19:05

标签: unicode terminal python-3.6 python-3.5

我的python文件:

print('Amanhã')

我正在Windows 10 Pro上使用VSCode 1.28.1中的集成终端。

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

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

如果我在基于3.5的环境中运行set PYTHONIOENCODING=utf8,然后执行脚本,则Unicode错误消失了,但是输出与预期的不完全相同:Amanh├ú

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

(我在普通的Windows终端(cmd.exe)中复制了此文件,而不是在VSCode内部复制-完全一样的结果。我还将注意到sys.getdefaultencoding()在{{之前和之后都返回utf-8 1}}命令)

1 个答案:

答案 0 :(得分:2)

基于错误的输出,您的终端正在使用cp437,该终端不支持字符ã

Python 3.6之前的版本,Python将Unicode编码为Windows上终端的编码。从Python 3.6开始,Python在写入终端时使用Unicode Win32 API,并且您发现它工作得更好。

如果必须使用Python 3.5,请签出win-unicode-console