你也许见过跟别的字格格不入的孤寡文字,打开过全是看不懂的字符的文档,全是框框的游戏对话,点击过跟真网址一模一样的钓鱼网站。所有的这些都跟电脑显示文字的原理有关。
电脑显示文字涉及到三个重要的概念:字符、字符集、字符编码。一个汉子一个拉丁字母,一个数字都是一个字符;这些字符集合起来叫做字符集,通常来说,一个字符集里没有相同的字符。而这些字符计算机一个也不认识,为了让计算机认识这些字符,我们就需要把这些字符用0和1表示出来,把字符转换成0和1的规则就是字符编码。
计算机存储数据的基本单位是字节,也就是byte,一个字节有8个二进制位组成,也就是8个bit,共有256种状态,也就是一个字节可以存储256个字符,而英文字符只有26个,所以在上世纪60年代,美国先作出了美国信息交换码简称ASCLL,共收录了128个字符。但当各国进入信息化社会的时候,就出现了问题,各国搞的EASCLL后面的128个字符都不太一样,这样就导致了在同一码位上的字符可能不一致,所以同一个文本放到不同的计算机中打开可能显示结果不一样。但当信息化来的中日韩三国时,字符太多,就会导致一个字符集存不完这些字符,就我国发布的GB 2312-80中就包含了6763个常用简体汉字,所以GB 2312用两个字节长度来编码一个字符,这样理论上就可以容纳65536个字符,但GB 2312-80中只是最最常用的汉字,有一些姓氏根本没在其中,还有繁体字,导致这些字根本打不出来。在今天新的字符集已经包含了部分生僻字,但显示出来跟正常字体不一样。很多字体都还只适配GB 2312中的字符,后来微软设计了汉字内码拓展规范 GBK。又后来人类出现了万国码UNICODE,如今UNICODE已经有了1114112个码位。
以上出现了很多的编码格式,但是用不同的编码格式就会导致乱码的产生,例如用GBK编码发送,而 另一个人是使用UTF-8去解码,就会出现乱码问题。