美文网首页
小议中文乱码

小议中文乱码

作者: aubell | 来源:发表于2015-10-24 16:47 被阅读69次

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

第一,你不使用中文;

第二,你不使用电脑;

第三,你不使用手机。

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

先从编码说起,

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

相关文章

  • 小议中文乱码

    如果你还从来没有遇到过中文乱码,可能有三个原因: 第一,你不使用中文; 第二,你不使用电脑; 第三,你不使用手机。...

  • Day_04_Servlet

    request获得中文参数乱码问题 response返回中文乱码问题 跳转

  • Servlet的一些问题

    1.传输中文的乱码问题 接收中文乱码(就是页面向服务器提交数据) 输出中文乱码(服务器向页面输出) 2.跳转

  • charles 配置

    中文乱码问题;Response中文乱码:在info.plist 中 的vmoption 添加-Dfile.enco...

  • charles 配置

    中文乱码问题;Response中文乱码:在info.plist 中 的vmoption 添加-Dfile.enco...

  • 2020-02-09_Resttemplate请求中文乱码

    Resttemplate请求中文乱码 1 概述 解决RestTemplate请求中文乱码问题。 如果是String...

  • sublime、vs code的中文显示

    如何解决Sublime Text 3不能正确显示中文的问题 中文乱码 sublime;VS Code:4个中文乱码...

  • 问题记录

    matlab中文乱码

  • Struts2小知识点

    文件下载时,中文名乱码处理 //文件名中文乱码fileName = new String(fileName.get...

  • PHP解决中文乱码

    PHP解决中文乱码

网友评论

      本文标题:小议中文乱码

      本文链接:https://www.haomeiwen.com/subject/ebothttx.html