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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了当print()unicode字符时,python 3.5与3.6的差异?相关的知识,希望对你有一定的参考价值。

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

以上是关于当print()unicode字符时,python 3.5与3.6的差异?的主要内容,如果未能解决你的问题,请参考以下文章

不知道整个 unicode 字符 python

python3中Unicode字符转中文

Python:在 Unicode 转义字符串上使用 .format()

Python2 处理 Unicode 字符串的规则

如何在 Python 中动态指定 unicode 字符串?

如何在 Python 3 中迭代 Unicode 字符?