Chinese Mojibake Encyclopedia
中文乱码是计算机系统在以错误编码方式解析字符数据时产生的一种现象,通常表现为不可理解的符号或替换字符。本百科的内容针对与简体中文相关的常见编码类型,总结了常见的乱码现象、产生原因及解决策略。
单次编码乱码
单次编码乱码指数据被错误地读取或解析一次编码后产生的现象。
古文码
示例:
瑕佸ソ濂藉︿範澶╁ぉ鍚戜笂特点: 显示为难以理解的生僻汉字或日韩文字符。
产生原因: 使用
GBK读取UTF-8编码的文本。技术解释:
UTF-8是变长编码,中文字符通常占 3 个字节,但中文GBK习惯以双字节编码。- 使用
GBK误解UTF-8的字节流会将 3 个字节拆分为多个双字节组合,从而产生乱码。
解决策略:
- 强制用
UTF-8解码文本,恢复原始字符。 - 使用编码检测工具(如
chardet)来识别文件的实际编码。
- 强制用
问号码
示例:
Ҫ�ú�ѧϰ��������特点: 大部分内容显示为替换字符
�或问号?。产生原因: 使用
UTF-8读取GBK编码的文本。技术解释:
GBK的双字节字符中许多字节组合在UTF-8编码规则下无效。UTF-8解码错误时插入替代符号�(U+FFFD),以占位显示。
解决策略:
- 强制用
GBK解码数据。 - 确认文件的实际编码与读取环境保持一致。
- 强制用
符号码
示例:
è¦å¥½å¥½å¦ä¹ 天天åä¸特点: 大部分字符显示为各种符号或方块
。产生原因: 使用
Latin1读取UTF-8编码的文本。技术解释:
UTF-8使用多字节编码,其中每个字节的值直接映射到Latin1的字符集。- 造成部分中文字符被错误解码为拼音或带音调符号。
解决策略:
- 强制用
UTF-8读取文本,避免错误解码。 - 避免在默认设置为
Latin1的环境中打开中文内容。
- 强制用
拼音码
示例:
ÒªºÃºÃѧϰÌìÌìÏòÉÏ特点: 显示为类似拼音声调符号的西文字符。
产生原因: 使用
Latin1读取GBK编码的文本。技术解释:
GBK的双字节内容被错误解析为单字节字符,其中映射到了Latin1的符号区域,导致形成拼音或特殊符号。
解决策略:
- 强制用
GBK解码内容。 - 避免在默认设置为
Latin1的环境中存放中文文件。
- 强制用
双重编码乱码
双重编码乱码指数据在存储或读取过程中连续发生两次编码错误后产生的更复杂乱码现象。
锟斤拷码
示例:
要锟矫猴拷学习锟斤拷锟斤拷锟斤拷锟斤拷特点: 所有内容均显示为
锟斤拷。产生原因: 使用
GBK编码的文本经过两次错误解码:- 数据用
UTF-8读取,导致部分字符变为替代符号�; - 含有
�的文本再用GBK解码,其中�的字节流(EF BF BD)在GBK下映射为固定字符锟斤拷。
- 数据用
技术解释:
- 锟斤拷码是完全不可读的乱码,原始信息永久丢失。
解决策略:
- 确认文档的真实编码格式,避免多次转换过程。
- 使用编码检测工具解析编码路径,避免误读。
污损码
示例:
要好好?习天天向上特点: 原句内容大致保留,仅部分字符变为乱码(例如
?或替换符号�)。产生原因: 使用
UTF-8编码的文本经过两次错误解码:- 第一次用
GBK解码,错误解析部分 UTF-8 字节,产生错误的汉字; - 第二次用
UTF-8解码上述结果,剩余无效字节被转换为乱码。
- 第一次用
技术解释:
- 污损码是一种部分可读的乱码类型,保留了原句的大部分有效信息,但因字节边界不对齐等问题导致部分字符变为乱码。
- 偶数长度的原文更可能恢复,因为编码过程中的字节对齐问题更少。
解决策略:
- 确认数据实际编码并统一读写环境,避免连续错误解码。
- 从可读内容中推测原句并手动修复少量位置的乱码。