讲师中心 微信公众号

工具推荐

视频效率加速
AniShort
AniShort

AI短剧协同制作平台

updream

一键生成高质量推广成片

Seko
Seko

AI短剧一键生成成片

剧云
剧云

中文短剧剧本制作平台

Python xmltodict转JSON乱码 解决字典转JSON时的编码问题

陌明君_7809

陌明君_7809

发布时间:2026-03-05 11:38:03

|

556人浏览过

|

来源于php中文网

原创

根本原因是json.dumps()默认ensure_ascii=True导致中文转义,且XML文件编码未正确指定或写入JSON时未设UTF-8编码。需三步:确认源XML编码→用对应encoding读取→parse后dumps时设ensure_ascii=False并以UTF-8写入。

python xmltodict转json乱码 解决字典转json时的编码问题

xmltodict.parse() 返回的字典含中文但 json.dumps() 出现乱码

根本原因不是 xmltodict 本身出错,而是 json.dumps() 默认不启用中文字符转义,且未指定 ensure_ascii=False —— 它会把所有非 ASCII 字符(比如中文)强制编码成 \uXXXX 形式,看起来像乱码,实际是 Unicode 转义序列。

  • 如果你用 print(json.dumps(data)) 看到一堆 \u4f60\u597d,这不是乱码,是 JSON 标准行为;真正要写入文件或传给前端时才需要可读中文
  • 必须显式传参 ensure_ascii=False,否则无论输入多干净,输出都是转义形式
  • 如果原始 XML 文件本身是 GBK 编码,而你没指定 encoding 给 xmltodict.parse(),那第一步就已损坏——此时 json.dumps 再怎么设也救不回来

从文件读取 XML 时 encoding 参数漏设导致后续全乱

xmltodict.parse() 接收字符串,不自动探测编码。若 XML 文件是 GBK 或 GB2312,直接用 open(path).read()(默认 UTF-8)读取,就会解码失败,产生 UnicodeDecodeError 或静默乱码。

  • 先确认 XML 文件真实编码:可用命令行 file -i filename.xml(Linux/macOS)或 VS Code 底部状态栏查看
  • 读取时务必显式指定:with open('data.xml', 'r', encoding='gbk') as f: xml_str = f.read()
  • 再传给 xmltodict.parse(xml_str);跳过这步,后面所有 JSON 操作都在错误数据上叠加
  • 如果 XML 声明里写了 <?xml version="1.0" encoding="GBK"?>,xmltodict 不会自动按它解码,仍需你手动处理

json.dumps() 写入文件后打开仍是乱码

即使加了 ensure_ascii=False,写入文件时若没指定文件编码,Python 默认用系统 locale(Windows 常为 GBK),而编辑器(如 VS Code、Notepad++)可能按 UTF-8 解析,显示就错位。

Python 环境工具专业版
Python 环境工具专业版

Python 环境工具专业版功能概述Python 环境工具专业版是一项面向实际任务的技能。它将相关步骤、工具调用和结果整理方式集中到统一流程中,帮助使用者更快完成目标并减少重复操作。核心要点使用时应结合输入条件选择合适的执行方式,核对必要参数、依赖环境与输出内容,并按原始要求处理异常情况。该技能适合需要稳定复用相关能力的场景,可作为自动化工作流的一部分,也便于后续检查、调整和扩展。执行完成后建议检查结果是否符合预期,并保留必要记录。使用与执行同时注意输入完整性、执行条件和输出可用性。从功能定位来看,该技能

下载
  • 写文件必须配对指定编码:with open('out.json', 'w', encoding='utf-8') as f: f.write(json.dumps(data, ensure_ascii=False, indent=2))
  • 不要用 open(...).write(...) 两步分开,避免中间字符串隐式转换
  • 检查目标文件是否真为 UTF-8:用 file -i out.json 验证,或在编辑器里看右下角编码标识
  • 如果下游系统(如 Java 后端)要求 BOM 头,需手动加 '\ufeff' 前缀,但绝大多数现代 JSON 解析器不需要也不推荐

嵌套层级深、含特殊字符时 json.dumps() 报错

xmltodict 可能将 XML 注释、CDATA、属性等转为特殊结构(如 @ 开头键名、#text 键),若其中混入不可 JSON 序列化的类型(如 datetime、自定义对象),json.dumps() 直接抛 TypeError。

立即学习“Python免费学习笔记(深入)”;

  • 常见报错:Object of type datetime is not JSON serializable —— 检查 XML 是否含时间戳字段,被解析为 datetime 对象
  • 简单过滤:用 default 参数兜底,例如 json.dumps(data, default=str, ensure_ascii=False),把所有非标类型转成字符串
  • 更稳妥做法:先递归遍历字典,把 datetime、bytes 等转成 ISO 格式字符串或 base64,而不是依赖 default=str(它会把 bytes 转成 b'xxx' 这种不可逆形式)
  • 注意:XML 属性值默认变成字符串,但某些 parser 配置可能保留原始类型,需实测验证
实际跑通的关键顺序就三步:确认源文件编码 → 用对应 encoding 读成字符串 → xmltodict.parse() 得字典 → json.dumps(..., ensure_ascii=False) + open(..., encoding='utf-8') 写入。漏掉任一环,中文都会“消失”。

热门AI工具

更多
花生AI
花生AI Hot

一款AI视频创作工具,主要用于B站推出的AI视频创作工具,适合需要提升相关任务效率的用户。

UP简历
UP简历 Hot

一款AI办公效率工具,主要用于基于AI技术的免费在线简历制作工具,适合需要提升相关任务效率的用户。

Atoms
Atoms Hot

Atoms是一款AI智能体工具,第一支自动构建真实业务的 AI 团队。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

PixPix
PixPix Hot

PixPix是一款面向电商视觉生产的AI商品图生成工具。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

讯飞智作

讯飞智作是一款AI视频创作工具,AI文本配音工具,数字人课程、营销视频制作。

蛙蛙写作

一款AI论文写作工具,主要用于超级AI智能写作助手,适合需要提升相关任务效率的用户。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

2355

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

3882

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

1296

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

4499

2025.09.10

python中print函数的用法
python中print函数的用法

python中print函数的语法是“print(value1, value2, ..., sep=' ', end=' ', file=sys.stdout, flush=False)”。本专题为大家提供print相关的文章、下载、课程内容,供大家免费下载体验。

3500

2023.09.27

python print用法与作用
python print用法与作用

本专题整合了python print的用法、作用、函数功能相关内容,阅读专题下面的文章了解更多详细教程。

269

2026.02.03

pdf怎么转换成xml格式
pdf怎么转换成xml格式

将 pdf 转换为 xml 的方法:1. 使用在线转换器;2. 使用桌面软件(如 adobe acrobat、itext);3. 使用命令行工具(如 pdftoxml)。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

5184

2024.04.01

xml怎么变成word
xml怎么变成word

步骤:1. 导入 xml 文件;2. 选择 xml 结构;3. 映射 xml 元素到 word 元素;4. 生成 word 文档。提示:确保 xml 文件结构良好,并预览 word 文档以验证转换是否成功。想了解更多xml的相关内容,可以阅读本专题下面的文章。

6737

2024.08.01

Go-Zero API开发使用教程
Go-Zero API开发使用教程

本专题聚焦Go-Zero的API开发,拆解.api描述文件的语法结构、路由与分组定义、参数绑定与校验规则,说明统一响应体、JWT鉴权、跨域与接口文档生成的落地方式,并给出网关聚合与接口测试的实践建议。

100

2026.11.12

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn