Python 2.7编码和feedparser

时间:2012-04-04 13:35:04

标签: python encoding feedparser

所以简而言之,我的情况是:

  • 从RSS提要中读取数据
  • 将内容打印到终端

当然,内容不是简单的ascii,它是utf-8,所以我得到像“öäå”这样的字符。但是当我打印文本时,它们都会被'\ xe4'这样的ecapes所破坏。与编码有关但我无法理解这一点。这应该是如此微不足道,但google fu让我失望。

一个例子是当我逐字逐句浏览内容并试图找到字符“ö”时:我这样做:

if u"ö" in word:

其中只提供:UnicodeDecodeError:'ascii'编解码器无法解码位置6中的字节0xc3 ...

编辑:

所以我觉得我发现了自己的问题。我正在获取feed项,然后只执行str(entry.content)并传递它,但是entry.content是一个列表,其中包含一个带有unicode字符串作为值的字典,所以我所做的(我猜)只是得到一个ascii字典内容的表示......

3 个答案:

答案 0 :(得分:2)

您正在尝试将编码文本与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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

尝试使用feedparser包http://packages.python.org/feedparser/ 它很好地处理编码并支持几乎所有的feed格式。您将获得结构良好的数据。