手持两把锟斤拷,口中疾呼烫烫烫
这篇文章我们来说说乱码的由来。相信大家基本都遇到过,其中最常见的乱码就是 “锟斤拷” 了 (锟读作 kūn):
乱码怎么产生的
乱码,一般是在编码的转换过程中产生。例如 Unicode 是不兼容其他地域性字符编码的,当有些 Unicode 中的字符,用作 GB 类编码去解析的时候,就会产生乱码。
在 Unicods 字符集有一个特殊的替换符号,专门用于表示无法识别或展示的字符,就是一个菱形中间一个问号:�
该符号的 UTF-8 的编码为 EF BF BD。更多请参考:� - 替换字符: U+FFFD - Unicode 字符百科
有些编辑器,会在遇到无法识别的字符时,自动将其替换为该符号 �,向用户表明这是无法识别的字符;
当有两个该符号的时候,例如 ��,那么其编码就为 EF BF BD EF BF BD
而如果用 GBK 的格式去解析 EF BF BD EF BF BD 的时候,由于 GBK 是 2 个字节表示一个汉字,因此会解析成:
- EF BF:锟
- BD EF:斤
- BF BD :拷
这就是锟斤拷的由来了。
实践
先创建一个 txt,其编码方式改为 UTF8,并输入 ��,然后用 GBK 的格式打开,就能看到了:本例通过 VSCode 演示,其他编辑器同理