在Python解析XML时®被转换为®

0 投票
3 回答
589 浏览
提问于 2025-04-17 03:10

我的RSS源包含:

<title><![ CDATA[HBO Wins 19 Emmy® Awards, The Most of Any Network This Year]]></title>

现在我在解析RSS,然后把标题赋值给title,如下所示:

 for item in XML.ElementFromURL(feed).xpath('//item',namespaces=NEWS_NS):
        title = item.find('title').text
        Log("Title :"+title)

当我查看输出或日志文件时,看到的标题是:

HBO赢得了19个艾美奖®,是今年任何网络中获奖最多的。

但是®变成了®。我尝试使用HTML解析器,但没有用。

3 个回答

0

你收到了用UTF-8编码的文本,但在某个环节,这些字节被错误地当作ISO-8859-1或其他编码来解读了。

没有更多的背景信息,很难准确判断错误发生在哪里。你应该先检查一下读取日志文件时使用的编码是什么。

1

你提到这个数据流的编码是ISO-8859-1。

那么,如果你说的那些字节应该被解释为®,实际上是C2 AE,那么这个文本确实Emmy® Awards,一切都正常。如果发送者想要不同的文本,他们应该发送不同的数据或者设置不同的编码。

如果这个数据流的编码是UTF-8,而发送过来的字节仍然是C2 AE,那么文本就会是Emmy® Awards

如果这个数据流的编码是ISO-8859-1,而发送过来的字节只是AE,没有C2,那么文本也会是Emmy® Awards

要确认这些字节是什么,可以在Unix中使用od -x命令,或者在Windows中使用debug.exe里的d命令。在这种情况下,不要相信记事本,它不可靠。

0

我试了以下方法,结果成功了:

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

当我把字符串转换成UTF-8格式时(比如把®变成®),然后再把它转换回iso-8859-1格式(把®变回®),这样就得到了正确的结果。

撰写回答