为什么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下。
答案 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兼容;你的里程可能会有所不同。