当前位置:首页 > Python > 正文

Python解决JSON中文乱码问题完整指南 - 编码设置与处理技巧

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()检查内存中数据是否正确
Python JSON中文处理核心:ensure_ascii=False + UTF-8编码

发表评论