原文、字节、候选结果的验证关系,强调可逆不等于确认来源
阅读口径

本文保留原字符串;操作在副本上进行,候选结果需由来源证据核对。

字符不是文件里的字节

Unicode 码点是字符的编号,例如 U+0041 表示 A;UTF-8 是把码点写成字节的一种方式。说文件是 Unicode 仍不够,需要说明实际使用 UTF-8、UTF-16 等哪种编码。

规范参考:Unicode:UTF 与 BOM 问答。操作场景与排查建议为本站说明。

原字符串的长度有不同答案

本地计算中,馃崙馃悢有 4 个码点,按 UTF-8 存储占 12 字节。前面的 GBK 候选实验得到 8 字节,是对同一文本使用另一种编码的结果;不能把 12 与 8 的区别当成文件损坏。

排查时把两个方向分开

写文件时把字符编码为字节,读文件时把字节解码成字符。记录生产端写入设置与消费端读取设置,不要仅在显示端反复换字体。新建文本交换流程优先统一 UTF-8。

可执行检查单

  1. 01记下文件的生产方式与声明编码。
  2. 02在副本上查看原始字节,不用截图替代。
  3. 03用明确编码读取并比较码点。

一个常见问题

UTF-8 文件一定不会乱码吗?

不会自动避免。UTF-8 字节仍可能被错误地当成其他编码读取,也可能在写入之前就已经包含错误文本。

本页结论

将字符编号、文件字节和屏幕字形分开记录,才知道应该修哪一层。