print() unicode 字符时 python 3.5 与 3.6 的差异?
differences in python 3.5 vs 3.6 when print() unicode charcters?
我的 python 文件:
print('Amanhã')
我在 VSCode 1.28.1 和 Windows 10 Pro 上使用集成终端。
当我激活基于 Python 3.6 的虚拟环境然后 运行 这个脚本时,它按预期执行并且我在终端中看到 Amanhã
。
但是当我激活基于 Python 3.5 的虚拟环境然后 运行 这个脚本时,它失败并出现 UnicodeEncodeError:
UnicodeEncodeError: 'charmap' codec can't encode character '\xe3' in position 5: character maps to <undefined>
如果我运行set PYTHONIOENCODING=utf8
在基于3.5的环境下,然后执行脚本,Unicode错误没有了但是输出并不完全符合预期:Amanh├ú
如何在基于 3.5 的 venv 中看到 Amanhã
?
(我在正常的 Windows 终端(cmd.exe)中复制了这个,而不是在 VSCode 中——完全相同的结果。我还会注意到 sys.getdefaultencoding()
returns utf-8
在 set PYTHONIOENCODING=utf8
命令之前和之后)
根据不正确的输出,您的终端正在使用 cp437
,它不支持字符 ã
。
Pre-Python 3.6,Python将Unicode编码为Windows上终端的编码。从 Python 3.6 开始,Python 在写入终端时使用 Unicode Win32 API,正如您所发现的那样,效果更好。
如果您必须使用 Python 3.5,请查看 win-unicode-console。
我的 python 文件:
print('Amanhã')
我在 VSCode 1.28.1 和 Windows 10 Pro 上使用集成终端。
当我激活基于 Python 3.6 的虚拟环境然后 运行 这个脚本时,它按预期执行并且我在终端中看到 Amanhã
。
但是当我激活基于 Python 3.5 的虚拟环境然后 运行 这个脚本时,它失败并出现 UnicodeEncodeError:
UnicodeEncodeError: 'charmap' codec can't encode character '\xe3' in position 5: character maps to <undefined>
如果我运行set PYTHONIOENCODING=utf8
在基于3.5的环境下,然后执行脚本,Unicode错误没有了但是输出并不完全符合预期:Amanh├ú
如何在基于 3.5 的 venv 中看到 Amanhã
?
(我在正常的 Windows 终端(cmd.exe)中复制了这个,而不是在 VSCode 中——完全相同的结果。我还会注意到 sys.getdefaultencoding()
returns utf-8
在 set PYTHONIOENCODING=utf8
命令之前和之后)
根据不正确的输出,您的终端正在使用 cp437
,它不支持字符 ã
。
Pre-Python 3.6,Python将Unicode编码为Windows上终端的编码。从 Python 3.6 开始,Python 在写入终端时使用 Unicode Win32 API,正如您所发现的那样,效果更好。
如果您必须使用 Python 3.5,请查看 win-unicode-console。