新华社
数据库乱码排查需要分别查看写入前、写入后和读取后的内容。应用日志、数据库客户端、接口原始响应和前端页面应逐层对照,不能只根据最终页面判断。只要某一层第一次出现异常,就应把重点放在该🚀层之前的编码转换上。
判断乱码来源需要记录同一内容在不同位置的显示结果。相同文本如果在数据库中正常、接口响应中异常,问题多半位于接口序列化或响应头;如果数据库中已经异常,网页端通常只是把错误🔮结果展示出来;如果只有某一台设备显示异常,则还要检查客户端字体、应用版本或本地解码设置。
网页中的特殊字符还可能受到字体支持影响。字体缺失通常显示为空白方框、问号或替代符号,而不是生成一组稳定的汉字乱码。若不同字体只改💎变字形、不改变字符内容,问题更可能是字体;若复制出来的文本本身已经异常,问题则属于编码📌或数据存储。
接口调试时,服务端日志显示正常而浏览器显示异常,🎉重点检查序列化组件和响应头;服务端日志也已经异常,则应检查请求参数解析、数据库读取或消息队列传输。多次转换同一字符串会增加不可逆损坏风险,程序中应避免无依据地重复调用编码转换函数。