为什么Python 3输出\ xe3,一个额外的char?

时间:2015-06-08 19:10:01

标签: python python-3.x unicode utf-8

为什么Python在输出中添加\xe3

>>> b'Transa\xc3\xa7\xc3\xa3o'.decode('utf-8')
'Transaç\xe3o'

期望值是:

'Transação'

有关我的环境的更多信息:

>>> import sys
>>> print (sys.version)
3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:44:40) [MSC v.1600 64 bit (AMD64)]   
>>> sys.stdout.encoding
'cp437'

这是在Console 2 + Powershell下。

1 个答案:

答案 0 :(得分:4)

您需要使用支持所有字符的控制台或终端。

在交互式控制台中打印时,字符将编码为控制台的正确编解码器,使用backslashreplace error handler不支持任何字符以保持输出可读而不是抛出异常。这是默认sys.displayhook() function的一项功能:

  

如果repr(value)无法使用sys.stdout.encoding错误处理程序(可能是sys.stdout.errors)加密'strict',请使用{{1}将其编码为sys.stdout.encoding错误处理程序。

您的控制台可以处理'backslashreplace'但不能处理ç。有几个编解码器包含第一个字符但不包括最后一个字符;您正在使用IBM codepage 437,但它绝不是唯一的一个。

如果您在标准Windows控制台(ã)中运行Python,请注意Python,Unicode和该控制台不能很好地混合使用。您可以安装win-unicode-console package以使Python 3使用Windows API来更好地输出Unicode文本;你需要确保你的字体能够显示你的Unicode文本。

我不确定该软件包是否与其他Windows shell兼容;你的里程可能会有所不同。