0

0

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

幻夢星雲

幻夢星雲

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

|

536人浏览过

|

来源于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 编码,而你没指定 encodingxmltodict.parse(),那第一步就已损坏——此时 json.dumps 再怎么设也救不回来

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

xmltodict.parse() 接收字符串,不自动探测编码。若 XML 文件是 GBKGB2312,直接用 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 解析,显示就错位。

Veo
Veo

Google 最新发布的 AI 视频生成模型

下载
  • 写文件必须配对指定编码: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),把所有非标类型转成字符串
  • 更稳妥做法:先递归遍历字典,把 datetimebytes 等转成 ISO 格式字符串或 base64,而不是依赖 default=str(它会把 bytes 转成 b'xxx' 这种不可逆形式)
  • 注意:XML 属性值默认变成字符串,但某些 parser 配置可能保留原始类型,需实测验证
实际跑通的关键顺序就三步:确认源文件编码 → 用对应 encoding 读成字符串 → xmltodict.parse() 得字典 → json.dumps(..., ensure_ascii=False) + open(..., encoding='utf-8') 写入。漏掉任一环,中文都会“消失”。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

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

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

452

2023.08.07

json是什么
json是什么

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

546

2023.08.23

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

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

330

2023.10.13

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

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

81

2025.09.10

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

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

192

2023.09.27

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

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

17

2026.02.03

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

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

1941

2024.04.01

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

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

2117

2024.08.01

Rust内存安全机制与所有权模型深度实践
Rust内存安全机制与所有权模型深度实践

本专题围绕 Rust 语言核心特性展开,深入讲解所有权机制、借用规则、生命周期管理以及智能指针等关键概念。通过系统级开发案例,分析内存安全保障原理与零成本抽象优势,并结合并发场景讲解 Send 与 Sync 特性实现机制。帮助开发者真正理解 Rust 的设计哲学,掌握在高性能与安全性并重场景中的工程实践能力。

2

2026.03.05

热门下载

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

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 4.8万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.8万人学习

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

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号