我是 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')