识别结果存进库全是 \u4e2d\u6587 这样的字面量,前端原样显示,用户看到的是一串反斜杠加字母。日志里能对上时间点,这种反而好排。

接口返回的是 JSON 字符串,中间被序列化了两次,第二次把中文转成了 ASCII 转义。落库前没有人做 json.loads 还原。这一点先确认清楚,后面就不用反复试。

import json
raw = resp['text']
if '\\u' in raw:
    raw = json.loads('"' + raw + '"')

这次卡住的地方就在「识别结果编码还原」这一环,单独把它拎出来验证,别和其他改动混在同一次发布里。先做最小复现,能稳定跑出来的问题,排查成本会低一个数量级。

别只看报错的最后一行,往上看几行,真正的起因通常在上面。同类问题如果隔一段时间又出现,多半是某个定时任务或重启流程把改动冲掉了。

处理上按这个顺序:确认响应是 application/json 并用 json 解析;避免对已序列化的字符串再 dumps 一次;落库前还原并断言含中文;前端展示层不要二次转义。

结果对不对很好判断,库里存的是可读中文 前端列表不再显示反斜杠。

作者 9823189