Python解决JSON中文乱码问题完整指南 - 编码设置与处理技巧
- Python
- 2025-07-31
- 1055
Python解决JSON中文乱码问题
全面指南 - 从问题根源到多种解决方案
为什么会出现JSON中文乱码?
Python的json
模块默认使用ASCII编码处理所有非ASCII字符(如中文),导致:
- 中文字符被转换为
\uXXXX
形式的Unicode转义序列 - 直接输出或写入文件时显示为乱码
- 可读性差且不符合预期输出
# 问题重现示例
import json
data = {"姓名": "张三", "城市": "北京"}
json_str = json.dumps(data) # 输出: {"姓名": "\u5f20\u4e09", "城市": "\u5317\u4eac"}
核心解决方案:ensure_ascii参数
使用json.dumps()
时设置ensure_ascii=False参数:
import json
data = {"姓名": "张三", "城市": "北京"}
json_str = json.dumps(data, ensure_ascii=False)
print(json_str) # 输出: {"姓名": "张三", "城市": "北京"}
参数说明:
ensure_ascii=True(默认):所有非ASCII字符都会被转义
ensure_ascii=False:原样输出非ASCII字符,保持中文可读性
文件读写中文乱码解决方案
写入JSON文件
使用open()
时指定encoding='utf-8':
import json
data = {"产品": "笔记本电脑", "价格": 5999}
with open('data.json', 'w', encoding='utf-8') as f:
json.dump(data, f, ensure_ascii=False)
读取JSON文件
同样需要指定正确的编码:
import json
with open('data.json', 'r', encoding='utf-8') as f:
data = json.load(f)
print(data) # 输出: {'产品': '笔记本电脑', '价格': 5999}
其他实用技巧
1 美化JSON输出
使用indent
参数使输出更易读:
data = {"学生": {"姓名": "李四", "成绩": [85, 92, 78]}}
json_str = json.dumps(data, ensure_ascii=False, indent=2)
print(json_str)
2 处理特殊字符
对于包含特殊符号的中文数据:
data = {"描述": "Python & JSON 处理:中文/特殊符号"}
json_str = json.dumps(data, ensure_ascii=False)
# 输出: {"描述": "Python & JSON 处理:中文/特殊符号"}
3 完整处理流程
# 1. 创建含中文的数据
data = {
"标题": "Python JSON中文处理指南",
"作者": "技术达人",
"标签": ["编码", "乱码解决", "中文处理"]
}
# 2. 转换为JSON字符串(不转义中文)
json_str = json.dumps(data, ensure_ascii=False, indent=4)
# 3. 写入文件(指定UTF-8编码)
with open('tutorial.json', 'w', encoding='utf-8') as f:
f.write(json_str)
# 4. 从文件读取
with open('tutorial.json', 'r', encoding='utf-8') as f:
loaded_data = json.load(f)
# 5. 打印读取结果
print(loaded_data)
最佳实践总结
- 总是设置ensure_ascii=False来处理中文
- 文件操作时明确指定encoding='utf-8'
- 使用indent参数美化JSON输出
- 确保整个处理流程编码一致(UTF-8推荐)
- 调试时可先用print()检查内存中数据是否正确
本文由KouTao于2025-07-31发表在吾爱品聚,如有疑问,请联系我们。
本文链接:https://521pj.cn/20256963.html
发表评论