小议中文乱码

如果你还从来没有遇到过中文乱码,可能有三个原因:

第一,你不使用中文;

第二,你不使用电脑;

第三,你不使用手机。

作为资深的电脑玩家,我尝试给大家解释一下为什么会出现中文乱码。

先从编码说起,

(1)最初,0和1是好的,于是电脑用0和1表示所有的东西;

(2)拉丁字母的大小写,10个阿拉伯数字,以及常用的标点总数量很少,用7个数字就能表示其中任何一个。

(3)人们用8个数字来表示这些(8个数字,要么是0,要么是1),绰绰有余。

(4)空出来的一个位置,常常写成0;也有人用来写一个数字做校验。

于是,英语和数学可以很自由的运行在计算机中了。

(5)非英语国家的人看到计算机是好的,也要使用计算机;

他们希望使用本土的文字。

(6)中国人也要用,但有很多分枝,最后造成很多种编码。

第一个分枝:大陆和港澳台的方法是不同的。这一次的分枝根源在于历史,历史造成中文有简体字和繁体字两种不同的方案。不要忘记,使用到中文的国家和地区还包括新加坡、日本、朝鲜等。所以,从一开始就注定了,会有很多的方案出来,每个国家都有自己的办法。简体中文最早使用的编码叫做GB2312。后续的版本基本都跟这个兼容。Windows流行的时候,大陆计算机内部使用的就是这一套;港台使用的是Big5编码。也就是说,两岸的计算机是无法认读对方的文件的。新加坡有时候用港台的,有时候用大陆的。日本自然是自己的一套,因为有假名的缘故。

第二个分枝:Windows和Linux的不同。Windows很忠实的使用了最早的GB2312/GBK系列的国家标准,Linux下面有自己的解决方案,曾使用可见的ascii字符来组合表示其它文字。

第三个分枝:GBK和UTF8的不同。世界上,爱好统一的人看到,各国文字编码种类太多是不好的。于是决定,把世界所有国家和地区的文字都统一编写到一个表中,给它唯一的编码,就叫Unicode。其中有两件不幸的事情发生过:第一,曾经有过两个组织要做这件事情,幸好最后合并了;第二,这些字实在太多了,所以编码会很长。编码一般就采用UTF8了。对于简体中文来说,并没有统一,而是增加了一种编码方法:从此,简体中文自身有了两种以上的编码方法,一种是GBK,一种是UTF8,两种表示之间没有任何顺序规律,GBK系列本身就很奇怪,GB2312部分是按照拼音排列的次序,扩充的部分是按照笔画排列的;UTF8并没有按照GBK的次序。不能简单的对应。而且,两种编码方法包含的汉字数量是不同的。请记得,中国是有至少56个民族的国家,GBK中包含了少数民族的文字,UTF8不太可能完全照搬。GBK的优点是中国字多,UTF8的优点是字符的国度多。

第四个分枝:大头和小头的不同。在使用Windows记事本的时候,你可以“另存为”菜单中看到,有Unicode和Unicode big endian的区别。这个是什么意思呢?就是小人国敲开一个鸡蛋,有的人喜欢先大头开始,有的人要从小头开始。汉子的Unicode很长,0或1每8个一组,需要好几组才能写清楚。每相邻的两组中,有的人喜欢交换排列:不要问我为什么要交换,因为这个很难解释,涉及到内存和CPU以及网络之间数据传输的习惯。(UTF8编码的也是Unicode,这个关系好比甲乙丙丁之于一二三四。)

第五个分枝:有BOM和无BOM的不同。BOM是Windows引入的,为了避免乱码产生,Windows在文本文件的头部加了一个看不见的字节,叫做BOM。BOM暗示了这个文件采用的是何种编码方式。这样的文件,在Windows中不会出现任何问题,但在Linux中,最初很多软件都不认识这个BOM,引起过混乱。现在,高级一点的软件都知道这个BOM了,再也不会混乱。BOM使得文本文件不再是那么纯粹的文本了。

如果你使用简体中文,在上面五个分枝上,任何一个分枝上会出现两种选择,所以可能面临32种选择。你的选择同网络机器上下载的文件不同,那么,恭喜你,可以看到乱码了。

现代的网络文件内部常会用人类都可见的明文写好编码方式,因此,乱码很少再出现了。

(PS:如果你不是秦始皇,千万不要试图统一汉字编码。你只会增加一种新的编码方式,让汉字的编码界更加混乱。)

你可能感兴趣的:(小议中文乱码)