一、字节错位
文本按 A 编码写入,却按 B 编码读出。UTF-8 的一个汉字占三字节,GBK 占两字节,两边长度对不上,读出来的就是完全不相关的字。特征是一整段连续错位,几乎没有正常字混在里面。
同一串文字在浏览器里正常、在文本编辑器里正常、发到另一台设备上却变成方块和问号,这类现象大多与字符编码的读写方式不一致有关。页面顶部那个样本 乱码嫩草囯乱亚洲 就是典型的一串错位字符:字形还在,语义已经不连贯。
本站把乱码当成一个可以逐层拆解的技术问题来处理:先看现象属于哪一类,再顺着字节、编码声明、字体三层往下查,最后用可复现的步骤把文字还原回去。网页、纯文本文档、电子表格、数据库字段是四种最常见的出错场景,我们分别给出对照说明。
发布:2026-11-04
乱码不是一种病,而是几种不同的“错”看起来很像。把成因分开,修复方向自然就分开了。
文本按 A 编码写入,却按 B 编码读出。UTF-8 的一个汉字占三字节,GBK 占两字节,两边长度对不上,读出来的就是完全不相关的字。特征是一整段连续错位,几乎没有正常字混在里面。
一段文本被“读成乱码—再存一次—再读一次”,错误被叠加。典型特征是出现“锟斤拷”这类固定组合,或者变成一串带音标的拉丁字母,长度比原文明显膨胀。
数据本身没错,但字体库没有对应字形,于是显示为空心方块;另一种是半角符号、换行符被当正文塞进双字节序列,把后面的字节对整体挤偏,出现零散错字。
| 现象 | 优先怀疑 | 处理入口 |
|---|---|---|
| 整段汉字变成生僻字组合 | UTF-8 被按 GBK 读 | 改解读编码为 UTF-8 |
| 出现“锟斤拷”等固定串 | 多次转换叠加 | 反向还原,避免再次保存 |
| 拉丁字母带重音符,长度变长 | UTF-8 被按 Latin-1 读 | 改解读编码为 UTF-8 |
| 空心方块、豆腐块 | 字体缺字形 | 更换系统字体,不改数据 |
| 表格或数据库个别字段乱 | 连接字符集与表字符集不一致 | 核对连接与字段两级字符集 |
多数情况下数据没坏,只是两端的解读编码不同。先确认原始字节有没有被改动,再统一解读方式即可,通常不需要重打一遍文字。
说明错误在保存那一刻已经写入文件。此时要反向还原:按错误编码读出字符串,再按目标编码写回,必要时重复一次,而不是继续在预览里切换。
方块通常是字体缺字形,数据本身可能完全正确。先换字体验证,如果换字体后正常显示,就不必动数据。
养成“先看字节、再改解读、最后才保存”的顺序。处理任何乱码文件前先留一份副本,是最省事的习惯。