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 和 "中国" 都能还原成同一个字符串。乱的是「打印 / 落盘」这一步,不是反序列化。