python json.dump 乱码问题

举报
林欣 发表于 2025/08/09 22:23:39 2025/08/09
【摘要】 在使用 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 -*-
    

常见问题排查

  1. 终端显示乱码
    • 确认终端支持 UTF-8(如 Windows 的 CMD 需要 chcp 65001)。
  2. 文件打开乱码
    • 用支持 UTF-8 的编辑器(如 VS Code、Notepad++)打开文件。
  3. HTTP 接口返回乱码
    • 确保响应头包含 Content-Type: application/json; charset=utf-8

总结

  • 推荐方案:始终使用 ensure_ascii=False 并确保环境编码为 UTF-8。
  • 写入文件:加上 encoding="utf-8" 参数。

这样可以彻底解决 JSON 中的中文乱码问题。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。