故障表现
接口返回的中文在浏览器里显示成一串反斜杠加字母数字,前端解析后虽然能还原,但日志里完全没法读。
问题出在哪
json.dumps 默认 ensure_ascii=True,会把非 ASCII 字符转成转义序列。判断时先分清是 json 中文转义 本身的配置问题,还是上游调用、运行环境带进来的差异;前者改配置就能收口,后者要沿着请求链路一层层往上找,处理顺序不能颠倒。先在出问题的机器上复现一次,把报错原文和发生时间记下来,再对着日志定位。
按这个顺序处理
- 输出时关闭 ensure_ascii
- 写入文件时指定 UTF-8 编码
- 接口层确认响应头字符集正确
对应的命令或配置片段如下,可直接复制:
import json, io
s = json.dumps({'name': '测试'}, ensure_ascii=False)
io.open('out.json', 'w', encoding='utf-8').write(s)
print(s)
不要一次改多个参数,每次只动一处并记录下来,否则现象变了也说不清是哪个改动起的作用。改完只在一台机器上验证不够,至少从外网和移动网络各试一次,才能确认不是本地缓存造成的假象。
怎么确认改好了
输出的 JSON 文件里直接是中文,前端读取后显示正常。