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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 00:00:56