我的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
命令之前和之后返回set PYTHONIOENCODING=utf8
)
基于错误的输出,您的终端正在使用cp437
,它不支持字符ã
。
在Python之前的版本3.6中,Python将Unicode编码为Windows上终端的编码。从Python 3.6开始,Python在写入终端时使用Unicode Win32 API,正如您所发现的那样,效果要好得多。
如果您必须使用Python 3.5,请查看win-unicode-console。