Skip to content

json.dumps 默认会把非 ASCII 字符转成 \uXXXX。中文看起来就像乱码,其实是转义,不是编码坏了。

python
import json

print(json.dumps("中国"))
# "\u4e2d\u56fd"

print(json.dumps("中国", ensure_ascii=False))
# "中国"

ensure_ascii=True(默认)保证输出全是 ASCII,方便塞进只认英文的日志或老协议。要给人看、要写文件、要和前端对明文中文,加上 ensure_ascii=False。

写入文件时还要指定 UTF-8,否则 Windows 上可能再转一层:

python
with open("out.json", "w", encoding="utf-8") as f:
    json.dump({"name": "中国"}, f, ensure_ascii=False)

json.loads 读 \u4e2d\u56fd 和 "中国" 都能还原成同一个字符串。乱的是「打印 / 落盘」这一步,不是反序列化。

测试开发工程师 · 专注自动化与系统架构 | 邮箱: hansblog@atumsoul.win