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

问题描述 投票:0回答:1

我的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

unicode terminal python-3.6 python-3.5
1个回答
2
投票

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

在Python之前的版本3.6中,Python将Unicode编码为Windows上终端的编码。从Python 3.6开始,Python在写入终端时使用Unicode Win32 API,正如您所发现的那样,效果要好得多。

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

© www.soinside.com 2019 - 2024. All rights reserved.