You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python minidom读取编码不符XML报错,如何指定编码而非手动修改?

解决minidom解析编码不一致XML文件的问题

这个问题我之前也碰到过,那些“声明编码和实际编码不匹配”的XML文件确实挺头疼的!不用手动修改XML文件的话,有几个优雅的处理方案:

方案1:手动指定正确编码读取文件

既然你已经知道这类文件实际是ISO-8859-1编码,那可以跳过parse()方法的自动编码检测,手动用正确编码读取文件内容,再用parseString()解析字符串:

from xml.dom.minidom import parseString

for File in Data['FileList']:
    # 以实际编码读取文件内容
    with open(File, 'r', encoding='ISO-8859-1') as xml_file:
        xml_content = xml_file.read()
    # 解析字符串形式的XML
    dom = parseString(xml_content)
    # 执行你的后续操作
    # do something

方案2:自动检测文件编码(更通用)

如果不确定所有问题文件的实际编码,推荐用chardet库自动检测编码,这样能兼容更多编码不匹配的场景:

首先安装依赖库:

pip install chardet

然后修改脚本:

from xml.dom.minidom import parseString
import chardet

for File in Data['FileList']:
    # 先以二进制模式读取原始数据
    with open(File, 'rb') as xml_file:
        raw_data = xml_file.read()
    # 自动检测编码
    detect_result = chardet.detect(raw_data)
    actual_encoding = detect_result['encoding']
    # 用检测到的编码解码为字符串
    xml_content = raw_data.decode(actual_encoding)
    # 解析XML
    dom = parseString(xml_content)
    # do something

为什么原来的代码会报错?

minidom.parse()方法会默认根据XML声明里的编码(比如<?xml version="1.0" encoding="UTF-8"?>)去读取文件,但如果文件实际保存的编码和声明不一致(比如实际是ISO-8859-1),就会出现ExpatError错误。而我们先手动用正确编码把文件解码为Unicode字符串,再交给parseString()解析,就绕开了这个编码不匹配的问题。

内容的提问来源于stack exchange,提问作者user3884301

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:50:54