sys.getdefaultencoding()
-> utf8
test = u'tempête'
test
-> u'temp\xc3\xaate'
print(test)
-> tempête # WTF ?
sys.setdefaultencoding('ascii')
sys.getdefaultencoding()
-> ascii
test = u'tempête'
test
-> u'temp\xc3\xaate'
print(test)
-> tempête #...
当我从pdb执行set_trace()时,我会观察到这些结果。
在python2.7 shell中我得到了正确的结果:
sys.getdefaultencoding()
-> ascii
test = u'tempête'
test
-> u'temp\xc3\xaate'
print(test)
-> tempête # WTF ?
我正在努力解决这个问题......
答案 0 :(得分:1)
确保您的locale
编码与终端仿真匹配。输入locale
进行检查。
sys.setdefaultencoding()
与打印无关 - Python使用您的语言环境来设置打印时使用的stdout编码。见sys.stdout.encoding
。
我可以像这样部分复制你的问题:
UTF-8
将语言环境设置为en_GB.ISO8859-1。即不是UTF-8
export LANG=en_GB.ISO8859-1
运行您的代码:
>>> test = u'tempête'
>>> test
u'temp\xc3\xaate'
ê
成为Ã(U + 00C3)和ª(U + 00AA)的事实是问题的关键,表明Python认为编码应该是8位字符集。
我无法复制你的最终版画,但我怀疑摆弄setdefaultencoding()
并煮熟一切 - 请参阅我的回答,了解为什么这是一个坏主意:https://stackoverflow.com/a/34378962/1554386