python json.dump 乱码问题
【摘要】 在使用 json.dumps() 时出现中文乱码,通常是因为默认情况下 json.dumps() 会将非 ASCII 字符(如中文)转义为 Unicode 编码(如 \u4e2d\u6587)。以下是几种解决方法: 方法 1:设置 ensure_ascii=Falseimport jsonpayload = {"name": "中文", "value": 123}json_str = jso...
在使用 json.dumps()
时出现中文乱码,通常是因为默认情况下 json.dumps()
会将非 ASCII 字符(如中文)转义为 Unicode 编码(如 \u4e2d\u6587
)。以下是几种解决方法:
方法 1:设置 ensure_ascii=False
import json
payload = {"name": "中文", "value": 123}
json_str = json.dumps(payload, ensure_ascii=False)
print(json_str) # 输出: {"name": "中文", "value": 123}
- 作用:禁用 ASCII 转义,直接输出中文字符。
- 注意:确保你的输出环境(如终端、文件)支持 UTF-8 编码。
方法 2:指定文件编码(写入文件时)
如果将 JSON 写入文件,需指定文件编码为 utf-8
:
with open("data.json", "w", encoding="utf-8") as f:
json.dump(payload, f, ensure_ascii=False, indent=4)
方法 3:处理已转义的字符串
如果已经生成了包含 \uXXXX
的字符串,可以通过以下方式还原中文:
json_str = '{"name": "\\u4e2d\\u6587"}'
parsed_dict = json.loads(json_str) # 先解析为字典
json_str_readable = json.dumps(parsed_dict, ensure_ascii=False) # 重新生成可读字符串
print(json_str_readable) # 输出: {"name": "中文"}
方法 4:检查环境编码
确保你的 Python 脚本文件、终端或 IDE 的编码为 UTF-8:
- 在脚本开头添加编码声明(Python 2 需要,Python 3 默认 UTF-8):
# -*- coding: utf-8 -*-
常见问题排查
- 终端显示乱码:
- 确认终端支持 UTF-8(如 Windows 的 CMD 需要
chcp 65001
)。
- 确认终端支持 UTF-8(如 Windows 的 CMD 需要
- 文件打开乱码:
- 用支持 UTF-8 的编辑器(如 VS Code、Notepad++)打开文件。
- HTTP 接口返回乱码:
- 确保响应头包含
Content-Type: application/json; charset=utf-8
。
- 确保响应头包含
总结
- 推荐方案:始终使用
ensure_ascii=False
并确保环境编码为 UTF-8。 - 写入文件:加上
encoding="utf-8"
参数。
这样可以彻底解决 JSON 中的中文乱码问题。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)