如何为Python minidom生成的XML文件添加utf-8编码声明
Python生成XML添加utf-8编码声明的解决方法
核心原因
你当前使用的toprettyxml()方法未指定encoding参数时,minidom默认生成的XML声明仅携带版本号,不会输出编码信息。
调整方案
方案1:二进制写入(推荐)
给toprettyxml()传入encoding="utf-8"参数,此时方法会返回bytes类型的XML内容,直接用二进制模式写入文件即可:
xml_bytes = minidom.parseString(ET.tostring(root)).toprettyxml(indent=" ", encoding="utf-8") with open("Test.xml", "wb") as f: f.write(xml_bytes)
方案2:字符串写入适配
如果需要先对XML内容做字符串层面的处理再写入,可以将返回的bytes解码为utf-8字符串后再操作:
xmlstr = minidom.parseString(ET.tostring(root)).toprettyxml(indent=" ", encoding="utf-8").decode("utf-8") with open("Test.xml", "w", encoding='utf-8') as f: f.write(xmlstr)
两种方案生成的XML头部都会自动带上<?xml version="1.0" encoding="utf-8"?>的声明,且文件存储编码和声明编码完全一致,不会出现乱码问题。
内容的提问来源于stack exchange,提问作者Abhishek Rai
相关产品推荐
相关产品推荐

