我知道 OP 询问了关于解析字符串的问题,但是在通过 Document.writexml(...) 将 DOM 模型写入文件时我遇到了同样的异常。如果有这个(相关)问题的人在这里登陆,我将提供我的解决方案。
我抛出 UnicodeEncodeError 的代码如下所示:
with tempfile.NamedTemporaryFile(delete=False) as fh:
dom.writexml(fh, encoding="utf-8")
请注意,“编码”参数仅影响 XML 标头,对数据的处理没有影响。为了修复它,我将其更改为:
with tempfile.NamedTemporaryFile(delete=False) as fh:
fh = codecs.lookup("utf-8")[3](fh)
dom.writexml(fh, encoding="utf-8")
这将使用encodings.utf_8.StreamWriter的实例包装文件句柄,该实例将数据处理为 UTF-8 而不是 ASCII,并且 UnicodeEncodeError 消失了。我从阅读xml.dom.minidom.Node.toprettyxml(...)的源代码中得到了这个想法。