所谓字符编码方案就是将所需编码的符号用一个序列号来表示。编码时当然会适当考虑分类的原则,即尽量将同类的字符放在一起,尽量以相同的二进制开头,如ASCII的a-b就分别对应十进制的序号:97 -122 ,97 的二进制是0110 0001 。
1 ASCII
因为计算机是美国人最先搞出来的,而美国人使用的符号少,一个字节(8 个位)就足够了,这就是ASCII,包括大、小定英文字母、数字、一些可打印或不可打印的其它符号,共128 个:
2 GB2312
中国使用的汉字需要以万计,常用的汉字也是以千计,一个字节远远不够。(两个字节8 个位可以表示2 ^16 =65536 个字符。)编码需要考虑与ASCII兼容,且方便使用。
2 .1 兼容ASCII。
2 .2 由两个大于127 的字节来映射我们增加的字节(确保两个字节的最高位都是1 );
2 .3 发现最高位是0 ,那么就可以确定这个字节映射的是ASCII的字符,那么就只读取一个字节,然后去查ASCII表,将其解析为ASCII表对应的字符。发现最高位是1 ,那么就可以确定这个字节映射的就是GB2312 的字符,那么就连续读两个字节,然后去查GB2312 ,然后将其解析为对应的字符。
2 .4 ASCII重新映射了两个字节的ASCII,这些称为全角字符,而本身的ASCII的一个字节映射的字符,称为半角字符。
2 .5 后面又增加了一些字符,形成了GBK,然后再增加了一些,形成了GB18030 ,都向前兼容。
2 .6 ANSI在不同操作系统中,对应不同的字符编码,如简体中文的操作系统,对应GB2312 ,繁体的对应Big5 ,日语的操作系统对应JIS。
GB2312 标准共收录6763 个汉字,其中一级汉字3755 个,二级汉字3008 个;同时,GB2312 收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682 个全角字符。
GB2312 的出现,基本满足了汉字的计算机处理需要,它所收录的汉字已经覆盖中国大陆99 .75 %的使用频率。
对于人名、古汉语等方面出现的罕用字,GB2312 不能处理,这导致了后来GBK及GB18030 汉字字符集的出现。
3 unicode
如果每个国家都搞自己的一套字符编码方案,对于信息通信自然不便,为此,国际标准化组织便搞了一个统一的unicode字符编码方案,尽可能包含各国使用的字符。
UCS-2 用2 个字节编码,UCS-4 用4 个字节编码(理论上2 ^32 =42949 67296 )。
unicode本身只规定了对应的二进制数是多少(也是一个序列号)。因为需要更多的位数,但发现一些编码在前的序列号使用一个字节或两个字节就行了,如果同样使用4 个字节的话,会造成空间浪费,可以考虑另外经济的存储方案。所以在unicode统一数字编码的基础上,再搞一套存储的编码方案,这就是utf,以用时间来换空间,或用空间换时间,或折衷,对应utf-8 、utf-32 、utf-16 ,因为存储的是另外一套编码体系,需要再做转换。转换格式分别是:
utf-8
不同的编码段使用不同的字节数(1 -6 )存储,一位的以0 开关,两位的段以110 和10 开头,三位的以1110 和10 、10 开头,四位的以11110 和10 、10 、10 开头。这样,编码在前的字符存储时就节省了空间,是一个以时间换空间的折衷方案。
utf-16
使用两个字节或者4 个字节来存储,分两个段,第一个段则直接存储,不转换,使用两个字节,如果属于第二个段(高段),第1 、2 个字节以11011 0 开头,第3 、4 个字节的以11011 1 开头,其它的以unicode编码依次填入。
utf-32 :固定长度,使用4 个字节存储,以空间换时间(因为不需要转换了)。
-End-
本页共25段,1786个字符,4101 Byte(字节)