OPが文字列の解析について質問したことは知っていますが、Document.writexml(...)を介してDOMモデルをファイルに書き込むときに同じ例外が発生しました。その(関連する)問題を抱えている人々がここに上陸した場合、私は私の解決策を提供します。
UnicodeEncodeErrorをスローしていた私のコードは次のようになりました:
with tempfile.NamedTemporaryFile(delete=False) as fh:
dom.writexml(fh, encoding="utf-8")
「encoding」パラメータは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のインスタンスでラップされます。このインスタンスは、データをASCIIではなくUTF-8として処理し、UnicodeEncodeErrorがなくなりました。xml.dom.minidom.Node.toprettyxml(...)のソースを読んでアイデアを得ました。