【问题标题】:parsing XML from a string into an element将 XML 从字符串解析为元素
【发布时间】:2015-05-18 10:28:11
【问题描述】:

我在将 XML 从字符串直接解析为元素时遇到了一些麻烦。 我有一个已转换为字符串的 xml 文件:

resp = requests.post(request_url, request_string,   proxies=urllib.getproxies(), stream=True)

正如这里推荐的:https://stackoverflow.com/a/25023776/1551810,我使用了内容而不是文本:

response_tree = ET.fromstring(resp.content)

我显然在 XML 文件中有语法错误:

XMLSyntaxError: Input is not proper UTF-8, indicate encoding !
Bytes: 0xB0 0x20 0x4E 0x6F, line 12, column 35

我尝试对内容进行编码,但无济于事:

ET.fromstring(resp.content.encode('utf8'))

我的 XMLSYntaxError 与以前相同。 谁能帮我? 我已经为此花费了两个小时。

【问题讨论】:

  • 注释说它是not utf-8,所以你需要弄清楚数据实际上是什么编码,然后要么转码(从编码解码,然后编码为 utf-8),或指定适当的 xml-header
  • 谢谢你的快速回答,数据是一个字符串,我解码了它。我现在有一个 UnicodeDecodeError。你能发展你的想法吗?
  • 非常类似于这个PHP问题:stackoverflow.com/questions/2507608/…;正如@deets 建议的那样,您需要按顺序获取编码
  • 好的,谢谢!我想我解决了。

标签: python xml unicode elementtree


【解决方案1】:

我终于找到了一个很好的库来帮助我解决这个问题:cchardet(https://pypi.python.org/pypi/cchardet/0.3.5) 我听从了@deets 的建议。

import cchardet
charac_coding_desired = 'UTF-8'
encoding = cchardet.detect(resp.content)['encoding']
if charac_coding_desired != encoding:
    strg= resp.content.decode(encoding, resp.content).encode(charac_coding_desired)

现在我可以粗暴地解析字符串了:

ET.fromstring(strg)

还是谢谢!!!

【讨论】:

  • 很好地解决了问题并发布了您的结果。短暂延迟后,您现在应该可以将自己的答案标记为已解决。请这样做,您将帮助遇到同样问题的其他人。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-08-28
  • 2017-03-24
  • 2014-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多