Python如何处理unicode文本

时间:2014-03-19 04:18:12

标签: python unicode

我正在使用Python 2.6.6

item = {u'snippet': {u'title': u'How to Pronounce Canap\xe9'}}
title = item['snippet']['title']
print title

结果:

How to Pronounce Canapé

期望的结果:

How to Pronounce Canapé

这看起来像是一个Unicode问题,我尝试编码和解码到utf8,但结果仍然相同,有什么想法吗?

5 个答案:

答案 0 :(得分:2)

您的终端需要UTF-8

$ locale charmap
UTF-8 

使用UTF-8打印Python:

>>> sys.stdout.encoding
UTF-8

将SecureCRT设置更改为接受UTF-8。

答案 1 :(得分:1)

这很可能是由于Python使用的默认编码与控制台编码不匹配。看起来Python假设编码是UTF-8,然后控制台将其解释为latin-1。

答案 2 :(得分:1)

如果可能,请使用\xe9而不是\u00e9。然后在输出unicode字符串时选择适当的编码:

print title.encode('latin1')

合理的编码取决于您输出的位置。通常,您必须从环境变量推断它,或者让您的用户在配置文件中做出选择。

PS:如果你经常处理Unicode字符串,我建议切换到Python 3(例如3.3),如果可能的话。在那里,Unicode处理更清晰/明确/清晰。

答案 3 :(得分:0)

我在终端中获得预期的输出(使用python 2.7.7) 您期望的格式取决于终端中设置的编码。对我来说,它设置为'cp437'

>>> import sys
>>> sys.stdin.encoding
'cp437'
>>> sys.stdout.encoding
'cp437'

您可以通过提供以下内容来验证您是否获得了正确的输出:

print title.encode('cp437')

答案 4 :(得分:0)

iso-8859-1中的sitecustomize.py文件中的默认编码设置为${pythondir}/lib/site-packages/

import sys
sys.setdefaultencoding('iso-8859-1')

对我而言,它适用于\xe9