美国在19世纪60年代建立了ASCII编码,能表示128个字符,包括英文字符、阿拉伯数字、西文字符以及32个控制字符;它用一个字节来表示具体的字符,最前面的一位统一规定为0(2^7=128)。

但是吧,米国只考虑了自个儿,像别人家如日本、韩国、中国这样的就无法使用ASCII编码了;所以呢,日本就把日文编到Shift_JIS里,韩国就把韩文编到Euc-kr里,相继出现了各种种各样的编码,造成不可避免地出现冲突,比如在多语言混合的文本中,显示出来会有乱码。因此想要打开一个文本文件,就必须要知道该文件的编码方式,不然就会出现乱码;

为了统一所有文字的编码,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。但是Unicode有一个缺点:因为Unicode包含了所有的字符,而有些国家的字符用一个字节便可以表示,而有些国家的字符要用多个字节才能表示出来。那么计算机怎么知道两个字节所代表的数据是表示一个字符呢(比如汉字)?还是表示两个英文字母呢?另外,不同字符需要的存储长度不一样,如果Unicode规定用3个字节存储字符,会发现英文字符存储时前面2个字节都要是0,这种情况很浪费存储空间呀;

这样就催生了utf-8编码;utf-8的特点是可变长;utf-8的编码规则只有两条:a.对于单字节的符号,字节的第一位设为0,后面7位为这个符号的unicode码(英语字母的utf-8编码和ASCII码是相同的)。b.对于大于1个字节的字符,第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位一律设为10,剩下的二进制位为这个符号的unicode码。

utf-8可变长解决了空间节省的问题,但衍生出来新的问题:在内存中存储,使用utf-8却由于它的长度不固定,带来了很大的不便,使得在内存处理字符变得复杂;对于这个问题的最终解决是:a.在内存中存储字符时统一使用unicode编码,电脑处理起来很方便。b.在保存到硬盘或者需要传输的时候,使用utf-8编码,可以压缩内存,节省空间。

ASCLL——开天辟地

在计算机中,所有的数据在存储和运算时都要使用二进制数表示(因为计算机用高电平和低电平分别表示1和0),例如,像a、b、c、d这样的52个字母(包括大写)以及0、1等数字还有一些常用的符号(例如*、#、@等)在计算机中存储时也要使用二进制数来表示,而具体用哪些二进制数字表示哪个符号,当然每个人都可以约定自己的一套(这就叫编码),而大家如果要想互相通信而不造成混乱,那么大家就必须使用相同的编码规则,于是美国有关的标准化组织就出台了ASCII编码,统一规定了上述常用符号用哪些二进制数来表示。

ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符。ASCII码,用一个字节表示,8位能够表示256个字符,可以用来表示所有的大写和小写字母,数字0到9、标点符号,以及在美式英语中使用的特殊控制字符,足够美国人用的了,事实上他们只用到了128个字符,还有位就空着了。

2.MBCS

后来啊,其他国家知道了这个码,但是各个国家有各个国家的语言,ASCll码能表示的东西就太少了。所以每个国家都开始编写自己国家的编码,统称为MBCS,全称:Muilti-Bytes Charecter Set,多字节字符集。

那么问题就来了,不同的国家,同一个编码可能会表示不同的字符,怎么做到国际统一呃呃呃。

3.GB2312

把中国单独拉出来看,MBCS时期,中国于1980年发布了GB2312,就是国标的拼音,这个编码用区位码(94个区,每区94个字符)的方式可以支持7000多个汉字,它所收录的汉字已经覆盖中国大陆99.75%的使用频率,基本可以满足汉字计算机的需要了。

4.GBK1.0

7000多个汉字人类当然是不能满足,所以人们在GB2312的基础上开始扩展,所以1995年GBK1.0诞生了(国标扩展的拼音),可以支持2万多个汉字。

5.GB18030

虽然事已至此,中国人还是不满足哈哈,所以2000年的时候GB18030来了,可以支持2万7千多个汉字。

6.Unicode

你是不是以为接下来还是中国人的不满足哈哈,不不不,其实上边的2~5阶段都是属于MBCS阶段,只不过我把中国拎出来讲了,谁让咱是中国人呢。那么既然MBCS无法把世界上各种文字和符号全部表示,就需要新出一种可以代表所有字符和符号的编码,那就是90年代Unicode。

Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536(注:此处说的的是最少2个字节,可能更多)。

7.UTF-8

UTF-8,是对Unicode编码的压缩和优化,所以UTF-8包含于Unicode,只是他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存…

伊我的个人感觉来说字符编码就跟种田一样,很早以前各家种各家的,种子是自己家产的,种什么自己家决定,所以会发现那会儿农作物五花八门的,在村里啥都可以看见,小麦、高粱、玉米、西瓜、菜瓜、南瓜等等等等,随着发展,慢慢的发现一些有趣的现象,比如我们村吧,种西瓜、高粱、小麦的越来越少,种梨、辣椒的越来越多,农作物越来越集中,不仅是作物的种类,作物的种植方式、销售渠道等也越来越规范化了。

 

posted on 2021-11-17 14:45  琴瑶  阅读(186)  评论(0)    收藏  举报