2011-09-27 66 views
0

我的RSS提要ontains被转换为®在Python我正在检查输出或日志文件,然后我看到如下标题:®同时解析XML

HBO赢得19个艾美奖,这是今年任何网络中的大多数。

®被转换为®。任何我尝试使用HTML解析器,但没有用。

+1

定义什么®的含义。 Feed的编码是什么?你打印什么编码?你为什么不使用神奇的http://www.feedparser.org/?还要注意,即使对象是一个合适的“unicode”实例,在你的Log()调用中,你也会将标题转换为一个'str'。 – patrys

+0

@patrys,feed,encoding =“iso-8859-1”。 feedparser.org是外部库吗?在这种情况下,我不能使用它。你能否澄清一下“你打印到哪种编码?” – Simsons

+0

看来你得到了一个正确的“®”字符的utf-8表示,但是将它打印到'latin1'('iso-8859-1')输出。我怀疑问题不在于你解码提要的方式,而是以你对结果进行Log()或查看记录结果的方式。 – patrys

回答

0

我尝试了以下工作和:

title = item.find('title').text 
title = title.encode('iso-8859-1') 

当我得到转换为UTF-8字符串(®到®),我将其转换回ISO-8859-1(®到®)并获取正确的输出

+0

你的应用程序中现在有两个* bug。一个是你原来的问题的原因。另一个是这个“修复”。 – wberry

0

您已收到一些使用UTF-8编码的文本,但在某些时候,这些字节被错误地解释为ISO-8859-1或其他编码。

没有更多的上下文,很难准确地确定错误发生的位置。您应该首先检查用于读取日志文件的编码。

+0

用于读取日志的编码是'UTF-8'。任何建议,以获得这个工作! – Simsons

1

您声明提要的编码是ISO-8859-1。

在这种情况下,如果你说的应该被解释为®字节实际上C2 AE,则文本真的,真的Emmy® Awards,和一切工作,因为它应该。如果发件人使用不同的文本,他们会发送不同的数据或设置不同的编码。

如果Feed的编码是UTF-8,并且通过线路发送的字节仍然是C2 AE,那么文本将是Emmy® Awards

如果Feed的编码是ISO-8859-1,并且通过线路发送的字节只是AE而没有C2,那么文本将是Emmy® Awards

要确定字节是什么,请使用Unix中的od -x命令或Windows中的debug.exe命令中的d命令。在这种情况下不要相信记事本。它在于。