的Python 2.7编码和feedparser
因此,在短期我的情况是这样的:的Python 2.7编码和feedparser
- 阅读来自RSS订阅源数据
- 打印内容到终端
课程和内容不简单的ascii,它是utf-8,所以我得到了像“ääå”这样的字符。但是,当我打印文本时,它们都会被像'\ xe4'这样的ecapes混淆。与编码有关,但我无法理解这一点。这应该是如此微不足道,但谷歌让我失望。
一个例子是,当我经历的内容一字一句,并试图找到字符“ö”:我做的:
if u"ö" in word:
刚刚给出:UnicodeDecodeError错误:“ASCII”编解码器”牛逼解码字节0xc3位置6 ...
编辑:
所以我觉得我找到了我的问题。我得到的饲料项目,然后只是做str(entry.content)并将其传递给它,但是entry.content是一个列表,其中包含一个以unicode字符串作为值的字典,所以我所做的(我猜)只是获得了一个ascii词典内容的表示...
您正试图将编码文本与Unicode相比较。 Python不知道编码后的文本是UTF-8,所以它猜测它是ASCII码,并尝试将它解码为unicode。解决方案是用适当的编码来显式解码。
查看Python Unicode HOWTO了解更多信息。
我可以使用此文件重现你的问题:
# coding: utf-8
word = "öäå"
if u"ö" in word:
print True
而与此文件修复:
# coding: utf-8
word = "öäå".decode('utf-8')
if u"ö" in word:
print True
我想我的问题是,虽然这个词的内容应该是“高龄津贴”我从解析器得到的东西只是逃脱像“\ XE4”,他们是str的类型,而我认为我应该有unicodes。所以我需要一种方法将这些转义转换回真实的表示。或者类似的东西,让这个问题很头痛:D – Guu 2012-04-04 13:42:49
虽然问题是由于我自己的失败和RTFM的不可能性,我仍然接受这个。 – Guu 2012-04-04 13:57:20
@Guu仅仅因为它们在您的REPL或终端中显示为转义并不意味着它们被存储为eascapes - 它们不是,或者您不会得到该错误。这就是如何在ASCII环境中显示高于128的字节值。 – agf 2012-04-04 14:16:46
如果你知道你的文字是UTF-8,您可以将其解码成在开始使用它们之前,请使用对象。只要读取文件中的字节,就可以使用字符串decode()
方法word.decode('UTF8')
解码它们以返回unicode对象。
http://nedbatchelder.com/text/unipain.html – 2012-04-04 13:39:43