Python下ISO-8859-1编码XML转UTF-8及解析问题求助
解决ISO-8859-1编码XML转UTF-8并解析的问题
核心思路
无需手动转码后再解析,直接利用xml.etree.ElementTree的解析能力指定原编码,解析完成后直接以UTF-8编码写入新文件,同时修正XML声明的编码信息。
单个文件处理代码
from xml.etree import ElementTree as ET # 输入输出文件路径 input_file = "StackOverflow.xml" output_file = "StackOverflow_utf8.xml" # 1. 解析ISO-8859-1编码的XML文件 # 指定parser的encoding参数,确保正确读取特殊字符 tree = ET.parse(input_file, parser=ET.XMLParser(encoding="iso-8859-1")) root = tree.getroot() # 2. 将解析后的XML以UTF-8编码写入新文件 # xml_declaration=True会自动生成<?xml version='1.0' encoding='utf-8'?>声明 tree.write( output_file, encoding="utf-8", xml_declaration=True, method="xml" ) # 可选:验证解析结果,打印参数值 for module in root.findall("Module"): param_value = module.find("Parameter").attrib.get("Value") print(f"解析到参数值: {param_value}")
批量处理大量XML文件
如果需要处理目录下所有XML文件,可使用以下代码:
from xml.etree import ElementTree as ET import os # 输入输出目录 input_dir = "path/to/your/xml_source" output_dir = "path/to/utf8_converted" # 创建输出目录(如果不存在) os.makedirs(output_dir, exist_ok=True) # 遍历目录下所有XML文件 for filename in os.listdir(input_dir): if filename.lower().endswith(".xml"): input_path = os.path.join(input_dir, filename) output_path = os.path.join(output_dir, filename) try: # 解析原编码XML tree = ET.parse(input_path, parser=ET.XMLParser(encoding="iso-8859-1")) # 写入UTF-8编码文件 tree.write(output_path, encoding="utf-8", xml_declaration=True, method="xml") print(f"已完成转换: {filename}") except Exception as e: print(f"转换失败 {filename}: {str(e)}")
你之前代码的问题说明
- 存在变量错误:
target.write应为f.write,导致无法写入文件 - 手动转码后再解析的逻辑有误:直接修改文件编码会破坏XML结构的编码兼容性,导致解析失败
- 模块导入混乱:部分代码使用
etree.XMLParser但未正确导入对应模块(你明确说明不能用lxml)
内容的提问来源于stack exchange,提问作者Noxos
相关产品推荐
相关产品推荐

