先找到首次改变的位置
保留输入样本,逐层对照。
画出实际数据路线
先写清输入框或文件、请求、服务端字符串、数据库、响应、浏览器显示的路线。对每个连接标注“字节还是字符”,以及编码由谁指定。网页传输检查点一:输入后、传输前,记录字符值。原文与修复原则检查点二:服务端解析后、保存前,记录字符值。
找第一处差异
演示:输入记录是目标表情,数据库查询已变成四字,响应只是忠实输出数据库。这时改 CSS 或网页 meta 不会修好上游存量数据,应比较请求解析与入库前后的内容。
用最小样本缩小范围
使用 A、中、一个补充平面字符和原字符串做不含隐私的样本。记录每层码点或字节,先证实单次复现,再决定修复边界。不要对整库开展无条件替换。
先处理新数据
更正错误边界的编码设置,再使用正常文本与异常样本验证后续写入。
定位清单
- 01标出生产端与消费端。
- 02为每个边界留一份样本。
- 03找到首次不同的一层,再修配置和存量。
- 04保留所有未修改样本。
修复前留档
- 记录组件与版本。
- 记录输入与输出的码点。
- 记录实际生效的编码名。
- 把旧数据恢复作为单独操作。
常见问题
每个环节都写 UTF-8 就够了吗?
还要验证实际字节和解析行为;配置名与运行时行为可能不同,已经损坏的内容也不会因改配置自动恢复。
需要一次排查所有系统吗?
不需要。先从能复现的最短路线开始,定位差异后再扩大检查范围。
本页结论
先定位,再分开处理新数据的预防与旧数据的恢复。