python - toprettyxml() : write() 参数必须是 str,而不是 bytes
问题描述
我的程序将一些 XML 数据从 XML 字符串中以一种漂亮的格式保存到一个文件中。这可以解决问题:
from xml.dom.minidom import parseString
dom = parseString(strXML)
with open(file_name + ".xml", "w", encoding="utf8") as outfile:
outfile.write(dom.toprettyxml())
但是,我注意到我的 XML 标头缺少编码参数。
<?xml version="1.0" ?>
由于我的数据容易包含许多 Unicode 字符,因此我必须确保在 XML 编码字段中也指定了 UTF-8。
现在,查看 minidom 文档,我读到“可以使用附加的关键字参数编码来指定 XML 标头的编码字段”。所以我试试这个:
from xml.dom.minidom import parseString
dom = parseString(strXML)
with open(file_name + ".xml", "w", encoding="utf8") as outfile:
outfile.write(dom.toprettyxml(encoding="UTF-8"))
但后来我得到:
TypeError: write() argument must be str, not bytes
为什么第一段代码不会产生该错误?我做错了什么?
谢谢!
R。
解决方案
从文档强调我的:
如果没有参数,则 XML 标头不指定编码,如果默认编码不能代表文档中的所有字符,则结果为Unicode 字符串。由于 UTF-8 是 XML 的默认编码,因此使用 UTF-8 以外的编码对该字符串进行编码可能是不正确的。
使用显式编码参数,结果是指定编码的字节字符串。建议始终指定此参数。为避免在不可表示的文本数据的情况下出现 UnicodeError 异常,编码参数应指定为“utf-8”。
因此,write
无论是否设置了编码,该方法都会输出不同的对象类型(如果您问我,这会很混乱)
因此,您可以通过删除编码来修复:
with open(file_name + ".xml", "w", encoding="utf8") as outfile:
outfile.write(dom.toprettyxml())
或以二进制模式打开文件,然后接受要写入的字节字符串
with open(file_name + ".xml", "wb") as outfile:
outfile.write(dom.toprettyxml(encoding="utf8"))