的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词典内容的表示...

+0

http://nedbatchelder.com/text/unipain.html – 2012-04-04 13:39:43

您正试图将编码文本与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 
+0

我想我的问题是,虽然这个词的内容应该是“高龄津贴”我从解析器得到的东西只是逃脱像“\ XE4”,他们是str的类型,而我认为我应该有unicodes。所以我需要一种方法将这些转义转换回真实的表示。或者类似的东西,让这个问题很头痛:D – Guu 2012-04-04 13:42:49

+0

虽然问题是由于我自己的失败和RTFM的不可能性,我仍然接受这个。 – Guu 2012-04-04 13:57:20

+0

@Guu仅仅因为它们在您的REPL或终端中显示为转义并不意味着它们被存储为eascapes - 它们不是,或者您不会得到该错误。这就是如何在ASCII环境中显示高于128的字节值。 – agf 2012-04-04 14:16:46

如果你知道你的文字是UTF-8,您可以将其解码成在开始使用它们之前,请使用对象。只要读取文件中的字节,就可以使用字符串decode()方法word.decode('UTF8')解码它们以返回unicode对象。

尝试使用feedparser包http://packages.python.org/feedparser/ 它处理好编码,并支持几乎所有的提要格式。你只会得到结构良好的数据。