【问题标题】:Unicode Encoding Errors Python - Parsing XML can't encode a character (Star)Unicode 编码错误 Python - 解析 XML 无法编码字符(星号)
【发布时间】:2013-04-16 00:00:19
【问题描述】:

我是 Python 的初学者,目前正在从 eventful.com API 解析基于 Web 的 XML 文件,但是在检索数据的某些元素时收到一些 unicode 错误。

我能够毫无问题地从 xml 文件中检索 5 个数据元素,但随后它终止并在 GAE 错误控制台中产生以下错误:

UnicodeEncodeError: 'ascii' codec can't encode character u'\u2605' in position 0: ordinal not in range(128)

我知道抛出我的解析器的字符是一个“★”字符,无论如何我都不想从 xml 文件中检索它。

我的代码如下:

class XMLParser(webapp2.RequestHandler):
        def get(self):
        base_url = 'my xml file'
        #downloads data from xml file
        response = urllib.urlopen(base_url)
        #converts data to string:
        data = response.read()

        #closes file
        response.close()

        #parses xml downloaded
        dom = mdom.parseString(data)
        node = dom.documentElement  
        #print out all event names (titles) found in the eventful xml
        event_main = dom.getElementsByTagName('event')

        event_names = []
        for event in event_main:
            eventObj = event.getElementsByTagName("title")[0]
            event_names.append(eventObj)

        for ev in event_names:
            nodes = ev.childNodes
            for node in nodes:
                if node.nodeType == node.TEXT_NODE:
                    print node.data

有什么方法可以检索“标题”元素并忽略此处的 ★ 字符等有趣字符?我真的很感激在这件事上的任何帮助。我已经尝试过使用 word.encode('us-ascii', 'ignore') 的解决方案,但这并不能解决问题。

-----------我找到了解决方案:

因此,当我遇到此类问题时,在与该主题的讲师交谈后,我发现只需要两行代码即可对已解析的 xml 文件进行编码和解码(在读取后进入程序)。希望这可以帮助遇到同样问题的其他人!

unicode_data = data.decode('utf-8')
data = unicode_data.encode('ascii','ignore')

【问题讨论】:

  • 我已经尝试过建议的此类 unicode 编码和解码方法,但仍然没有这样的运气。
  • 您的问题在于打印节点数据。如果没有对异常的完整回溯,我无法再帮助诊断这个问题,但问题不可能出在解析器处理的内容上。

标签: python unicode xml-parsing


【解决方案1】:

你在哪里使用你的解码方法?

我过去遇到过这个错误,不得不解码原始数据。换句话说,我会尝试做

data = response.read()
#closes file
response.close()
#decode
data.encode("us-ascii")

也就是说,如果它实际上是 ascii。我的意思是,在调用 parseString 之前,请确保在原始结果仍为字符串格式时对其进行编码/解码。

【讨论】:

  • 真的,重新编码 XML 是一种解决方案吗?这不是 XML 输入问题!这是打印节点数据的问题!
猜你喜欢
  • 2015-02-03
  • 2016-01-04
  • 2018-12-11
  • 1970-01-01
  • 2016-06-19
  • 2019-09-01
  • 2017-01-17
  • 2016-11-14
  • 2017-03-31
相关资源
最近更新 更多