1

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

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

当然,内容不是纯 ascii,它是 utf-8,所以我得到像“öäå”这样的字符。但是当我打印文本时,它都被'\xe4'之类的转义符弄乱了。与编码有关,但我无法理解这一点。这应该是微不足道的事情,但 google fu 让我失望了。

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

if u"ö" in word:

这只是给出: UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 6 ...

编辑:

所以我想我找到了我的问题。我正在获取提要项目,然后只是执行 str(entry.content) 并继续传递,但 entry.content 是一个列表,其中包含一个以 unicode 字符串作为值的字典,所以我所做的(我猜)只是得到一个 ascii字典内容的表示...

4

3 回答 3

2

您正在尝试将编码文本与 unicode 进行比较。Python 不知道编码文本是 UTF-8,所以它猜测它是 ASCII 并尝试将其解码为 un​​icode。解决方案是使用适当的编码对其进行显式解码。

查看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
于 2012-04-04T13:38:32.543 回答
0

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

于 2012-04-04T13:39:05.457 回答
0

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

于 2012-04-04T16:02:00.590 回答