乱码的表现

上年纪的人在早几年接触C编程时候一定很熟悉一段锟斤拷锟斤拷锟斤拷锟斤拷,看到这段话的时候就会心里咯噔一下,写的代码又特么废了。

识别乱码的技巧

乱码的识别

乱码产生的原因

计算机最初是英文语境的人发明的,而计算机可理解的只有0和1,就需要将英文字母映射成计算机可识别的0和1,这个过程就叫编码。最早计算使用的编码方式叫American Standard Code for Information Interchange,缩写就是ASCII

而ASCII一个字节只有8个二进制状态,最多能表现2^{8} = 256个不同的符号,对于26个字幕和一些常用的特殊符号来说,足够使用了。

但是对于上万、十万的汉字来说,ASCII编码就不够用了,这时候就产生了GB编码,比较熟悉的就是GB2312简体中文编码。

GB编码使用了2个字节表示一个汉字,这样GB编码就可以表示不超过2^{8} * 2^{8} = 65536个不通的符号。对于常用的中文来说,GB编码足够用了。

然而问题又产生了,中英文够用了,但更多的语种比如:韩语、西班牙语、法语…需要支持的语种、符号越来越多,就又产生了一个新的编码方式Unicode

Unicode使用3-4个字节表示一个符号,理论上可以支持所有人类使用的符号

重点来了,如果一个使用了GB编码的文档用Unicode编码打开读取会发生什么呢?因为GB编码是使用了2个字节表示一个符号,而Unicode会尝试将4个字节转换成一个符号输出,最终就会将本来人类可以正常理解的两个汉字变成了一个,也就是前边图片中的口字码

换个专业的名词就管这种情况叫乱码,本质上就是用错误的编码解码