Python解析含西班牙语文本的XML转JSON时遇字符编码问题
解决xmltodict解析西语XML转JSON乱码问题
核心原因
你碰到的乱码是典型的编码解码不匹配导致的:比如用UTF-8读取了实际为ISO-8859-1编码的文件,或是写入JSON时未正确处理字符编码,使得Unicode字符被错误转换。
分步解决方案
1. 确认XML文件的真实编码
先搞清楚你的XML文件实际使用的编码:
- 查看XML头部声明,比如
<?xml version="1.0" encoding="ISO-8859-1"?> - 如果没有声明,用VS Code等文本编辑器打开文件,查看右下角显示的编码标识。
2. 正确读取XML文件
读取时必须指定和文件实际一致的编码,避免系统默认编码干扰:
import xmltodict import json # 示例:若XML为ISO-8859-1编码 with open('productos.xml', 'r', encoding='iso-8859-1') as xml_file: xml_content = xml_file.read() # 解析XML为字典 data_dict = xmltodict.parse(xml_content)
3. 写入JSON时确保UTF-8编码
使用json.dump时,设置ensure_ascii=False保留原字符,同时指定encoding='utf-8'写入:
# 生成JSON文件 with open('productos.json', 'w', encoding='utf-8') as json_file: json.dump(data_dict, json_file, ensure_ascii=False, indent=4)
4. 验证解析结果
如果仍有问题,可先打印字典内容确认字符是否正确:
print(data_dict['productos']['producto']) # 检查是否显示Chócolo mazorca、Pimentón
常见错误排查
- 禁止混合编码:比如用UTF-8读ISO-8859-1文件,再用ISO-8859-1写JSON,会导致二次乱码
- 更新xmltodict到最新版本:旧版本可能存在编码处理bug,执行
pip install --upgrade xmltodict - 若XML无编码声明,优先尝试用
latin-1读取(单字节编码不会丢失字符)
示例验证
假设你的XML内容如下:
<?xml version="1.0" encoding="ISO-8859-1"?> <productos> <producto>Chócolo mazorca</producto> <producto>Pimentón</producto> </productos>
用上述代码处理后,JSON文件会正确输出:
{ "productos": { "producto": [ "Chócolo mazorca", "Pimentón" ] } }
内容的提问来源于stack exchange,提问作者CZarate29
相关产品推荐
相关产品推荐

