【发布时间】:2012-11-13 10:23:41
【问题描述】:
我正在尝试使用 xml.sax 解析器从 URL 解析 XML。我知道还有其他库可以使用,但来自 Java 这是我最熟悉的库,对我来说似乎最不复杂。
我用来解析的代码如下:
parser = xml.sax.make_parser()
handler = MangaHandler()
parser.setContentHandler(handler)
url = urlfetch.Fetch('http://www.mangapanda.com/alphabetical', allow_truncated = False, follow_redirects = False, deadline = False)
xml.sax.parseString(url.content, handler)
一旦解析器到达第一个 & 符号,这将返回 SaxException(无效令牌):
SAXParseException: <unknown>:582:34: not well-formed (invalid token)
因为urlfetch 返回的是字符串而不是流,所以我不能使用parse()(仅适用于流),只能使用parseString()。要查看解析为流是否可以解决此问题,我尝试了:
parser.parse(io.StringIO(url.content).encode('utf-8'))
但这会返回:
TypeError: initial_value must be unicode or None, not str
我也尝试使用urllib2 库,它确实返回流而不是urlfetch,但文件太大并且会自动截断,导致数据丢失。
非常感谢任何解决此问题的方法,因为我花了几天时间绕过一个障碍,只是为了被另一个障碍阻止。
【问题讨论】:
-
要获取 unicode,您必须使用 decode('utf-8')。当我开始使用 Python 时,这也让我感到困惑。
-
由于更新远离我而无法尝试此操作,现在我无法回滚 -___-
-
没用。
parser.parse(io.StringIO(url.content).decode('utf-8')) TypeError: initial_value must be unicode or None, not str -
我想你想要:
io.StringIO(url.content.decode('utf-8'));您正在将 url 内容作为 utf-8 解码为 Unicode。
标签: python google-app-engine parsing encoding streaming