我的程序将一些XML数据从XML字符串中以一种漂亮的格式保存到文件中。这就是诀窍:
$data
但是,我注意到我的XML标头缺少编码参数。
from xml.dom.minidom import parseString
dom = parseString(strXML)
with open(file_name + ".xml", "w", encoding="utf8") as outfile:
outfile.write(dom.toprettyxml())
由于我的数据容易包含许多Unicode字符,因此我必须确保在XML编码字段中也指定了UTF-8。
现在,看一下minidom文档,我读到“可以使用额外的关键字参数编码来指定XML头的编码字段”。所以我试试这个:
<?xml version="1.0" ?>
但后来我得到了:
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"))
为什么第一段代码不会产生错误?我做错了什么?
谢谢!
R上。
答案 0 :(得分:0)
您可以按照以下步骤解决问题:
with open(targetName, 'wb') as f:
f.write(dom.toprettyxml(indent='\t', encoding='utf-8'))
答案 1 :(得分:-1)
:
如果没有参数,则XML标头不指定编码,如果默认编码不能表示文档中的所有字符,则结果为 Unicode字符串。使用UTF-8以外的编码对此字符串进行编码可能不正确,因为UTF-8是XML的默认编码。
使用显式编码参数,结果是指定编码中的字节字符串。建议始终指定此参数。为了避免在无法表示的文本数据的情况下出现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"))