我的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}}命令)
答案 0 :(得分:2)
基于错误的输出,您的终端正在使用cp437
,该终端不支持字符ã
。
Python 3.6之前的版本,Python将Unicode编码为Windows上终端的编码。从Python 3.6开始,Python在写入终端时使用Unicode Win32 API,并且您发现它工作得更好。
如果必须使用Python 3.5,请签出win-unicode-console。