🔤 字符编码检测
自动识别编码 · 乱码修复 · 编码转换
自动识别编码 · 乱码修复 · 编码转换
字符编码是把文字映射成计算机二进制数据的一套规则。同一串中文,用UTF-8、GBK、BIG5存出来的字节完全不同。UTF-8是国际通用编码,GBK/GB2312是简体中文编码,BIG5是繁体中文,Shift-JIS是日文。
乱码八成是"用错的编码去读对的字节"。比如文件是GBK存的,却用UTF-8去读,字符就全乱了。也可能是声明与内容不符、或传输/数据库存取时编码没统一。编码检测就是帮你判断"该用哪种编码读"。
检测基于统计特征和字节模式分析,对UTF-8、GBK这类常见编码准确率很高。但短文本或纯英文文本几乎每个编码都兼容,这时无法区分,需要结合上下文或原文件信息判断。
可以。它们只是同一批汉字的不同存储方式,内容完全等价。用工具或代码把字节按源编码解码、再按目标编码编码即可无损转换。转换乱码的关键是"先定对源编码"再转。
很可能文件是GBK存储,但你的代码/数据库/HTML声明的是UTF-8。程序按UTF-8去解析GBK文件就乱码。解决办法是统一成同一套编码,或显式指定读取编码。
BOM是文件开头的几个隐藏字节(UTF-8的BOM是EF BB BF),用来标记"我是UTF-8"。很多编辑器靠它识别编码。但有些程序不认BOM,会把那3个字节当内容显示成乱码字符,所以要不要保留BOM得看场景。
重点是"三级统一":数据库/表的字符集、连接字符集、页面输出字符集,三者都要一致(通常都用UTF-8)。最常见坑是表是UTF-8、连接却是latin1,导致存取时转错。
这个(U+FFFD)是"替换字符",表示该字节无法用当前编码解码。它本身不是乱码,而是"解码失败"的提示。看到它,说明字节流里混入了不属于该编码的字节,多半是源编码判断错了。
不同编码的"体型"和适用场景差异很大,选错就是乱码的根源。
| 编码 | 一个汉字占 | 适用范围 | 特点 |
|---|---|---|---|
| UTF-8 | 3字节 | 全球通用 | 国际标准,兼容ASCII |
| UTF-16 | 2字节 | 系统内部 | Windows内核常用 |
| GBK/GB2312 | 2字节 | 简体中文 | 国内老系统多 |
| BIG5 | 2字节 | 繁体中文 | 港澳台地区 |
| Shift-JIS | 2字节 | 日文 | 日本老系统 |
| EUC-KR | 2-3字节 | 韩文 | 韩国 |
做新项目无条件选UTF-8就对了,兼容性最好。"统一用UTF-8"能解决绝大多数乱码问题。
乱码不是突然出现的,它是"编码一路不统一"的连锁反应。理解这个链条,才知道在哪一环堵住。
| 症状 | 编码错位场景 | 排查方向 |
|---|---|---|
| 中文变乱码 | 存储与读取编码不一致 | 统一存储读取编码 |
| 开头多"锘" | UTF-8带BOM | 去BOM或按UTF-8读 |
| 繁体变简体 | BIG5与GBK混淆 | 按正确编码转 |
| 日韩文字混乱 | 编码识别错 | 用对应编码重转 |
只要"存储、传输、读取"三处都用同一套编码,乱码就基本不会发生。
UTF-8有严格的字节模式,违反模式就说明不是合法的UTF-8,这给检测提供了可靠依据。
| 类别 | 首字节范围 | 字节数 | 示例 |
|---|---|---|---|
| ASCII | 00~7F | 1 | 英文字母、数字 |
| 两字节 | C2~DF | 2 | 少量符号 |
| 汉字 | E0~EF | 3 | 常见中文 |
| 四字节 | F0~F4 | 4 | 生僻字、emoji |
工具检测UTF-8时,就是靠"是否严格符合这种模式"来判定的,所以英文字符能逐一验证、中文能数出多字节序列。
与其事后修复,不如从源头统一编码,一劳永逸。
| 环节 | 统一为 | 说明 |
|---|---|---|
| 文件存储 | UTF-8无BOM | 源文件统一 |
| HTML声明 | meta charset=utf-8 | 页面编码 |
| 数据库 | utf8mb4 | 表与连接字符集 |
| 传输协议 | UTF-8 | 请求响应编码 |
| 团队协作 | 约定UTF-8 | 避免混用 |
把"全链路UTF-8"当成默认约定,乱码问题就基本销声匿迹了。
| 乱码特征 | 多数原因 | 处理方向 |
|---|---|---|
| 形乱码 | UTF-8字节被按GBK读 | 按GBK转回UTF-8 |
| 中文变字符 | 存在非法UTF-8字节 | 确认源编码后再转码 |
| 开头多出"锘" | UTF-8带BOM | 去掉BOM或按UTF-8读 |
| 繁简颠倒 | BIG5/GBK混淆 | 按正确繁简编码转 |
| 日文变韩文 | 编码识别错 | 用Shift-JIS/EUC-KR重转 |
| 场景 | 推荐编码 | 说明 |
|---|---|---|
| 新网页/新项目 | UTF-8 | 国际通用 |
| 老旧国内系统 | GBK | 兼容旧数据 |
| 港澳台繁体站 | BIG5/UTF-8 | 可选 |
| 数据库 | utf8mb4 | 支持emoji |
| 邮件/协议 | UTF-8 | 标准选择 |
1. 粘贴需要检测的文本到输入框。
2. 点击"检测编码",查看识别的编码和字符构成分析。
3. 点击"修复乱码",尝试用常见编码反向纠正。
4. 查看修复后的文本,确认是否恢复正常。