我已经为此奋斗了一个小时。我正在解析一个 XML 字符串iterparse
。但是,数据没有正确编码,我不是它的提供者,所以我无法修复编码。
这是我得到的错误:
lxml.etree.XMLSyntaxError: line 8167: Input is not proper UTF-8, indicate encoding !
Bytes: 0xEA 0x76 0x65 0x73
我怎样才能简单地忽略此错误并继续解析?我不介意,如果一个字符没有正确保存,我只需要数据。
这是我尝试过的,全部来自互联网:
data = data.encode('UTF-8','ignore')
data = unicode(data,errors='ignore')
data = unicode(data.strip(codecs.BOM_UTF8), 'utf-8', errors='ignore')
编辑:
我无法显示 url,因为它是私有 API 并且涉及我的 API 密钥,但这是我获取数据的方式:
ur = urlopen(url)
data = ur.read()
导致问题的字符是: å
,我猜ä
&ö
等也会破坏它。
这是我尝试解析它的部分:
def fast_iter(context, func):
for event, elem in context:
func(elem)
elem.clear()
while elem.getprevious() is not None:
del elem.getparent()[0]
del context
def process_element(elem):
print elem.xpath('title/text( )')
context = etree.iterparse(StringIO(data), tag='item')
fast_iter(context, process_element)
编辑 2:当我尝试在 PHP 中解析它时,就会发生
这种情况。澄清一下,F***ing Åmål 是一部戏剧电影=D
该文件以<?xml version="1.0" encoding="UTF-8" ?>
这是我从中得到的print repr(data[offset-10:offset+60])
:
ence des r\xeaves, La</title>\n\t\t<year>2006</year>\n\t\t<imdb>0354899</imdb>\n