【问题标题】:® gets converted to ® in Python while parsing XML® 在解析 XML 时在 Python 中转换为 ®
【发布时间】:2011-09-27 09:32:43
【问题描述】:

我的 RSS 提要包含:

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

现在我正在解析 RSS,然后将标题分配给标题,如下所示:

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

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

HBO 赢得了 19 项艾美奖,这是今年所有网络中最多的。

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

【问题讨论】:

  • 定义 ® 的含义。提要采用什么编码?您要打印什么编码?你为什么不使用奇妙的feedparser.org?另请注意,在您的 Log() 调用中,您将标题转换为 str,即使该对象是正确的 unicode 实例。
  • @patrys,提要,编码="iso-8859-1"。 feedparser.org 是外部库吗?在那种情况下,我不能使用它。您能否澄清一下“您打印的编码是什么?”
  • 您似乎得到了“®”字符的正确 utf-8 表示,但将其打印到 latin1 (iso-8859-1) 输出。我怀疑问题不在于您解码提要的方式,而在于您 Log() 结果或查看记录结果的方式。

标签: python xml rss non-ascii-characters


【解决方案1】:

您声明 Feed 的编码是 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 命令。在这种情况下不要相信记事本。它在撒谎。

【讨论】:

    【解决方案2】:

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

    没有更多上下文,很难准确判断错误发生在哪里。您应该首先检查用于读取日志文件的编码。

    【讨论】:

    • 用于读取日志的编码是 'UTF-8' 。任何建议让它工作!!!!
    【解决方案3】:

    我尝试了以下方法并成功了:

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

    当我将字符串转换为 UTF-8(® to ® ) 并将其转换回 iso-8859-1(® to ® ) 并获得正确的输出时

    【讨论】:

    • 您的应用程序中现在可能存在 两个 错误。一个是你原来的问题的原因。另一个是这个“修复”。
    猜你喜欢
    • 1970-01-01
    • 2010-09-19
    • 1970-01-01
    • 2017-05-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-09-03
    相关资源
    最近更新 更多