计算机编码形式

一、编码类型

首先要搞清楚每种编码的含义及其表现形式。

1、ASCII码

ASCII(American Standard Code for Information Interchange,美国信息交换标准码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其它西欧语言。他是现今最通用的单字节编码系统,并等同于国际标准ISO/IEC 646。

ASCII码用1个字节(byte)存储英文和字符,前期用了128个,因此 ASCII 只使用了一个字节的后7位,最高位都为0。后来新加了其它欧洲国家的字符,128~255这一段,扩充为EASCII码。256个字符,基本上涵盖了键盘上所有的字符

2、GBK

随时计算机在全世界各个国家的普及,不得不再一次面临编码的问题。中国的汉字成千上万,大大超过了ASCII码能标识的范围了。

于是中国人设计了一套叫做GB2312,又称GB0,1981年发布,共收录6763个汉字,同时兼容ASCII。GB2312基本满足了汉字的处理需求,覆盖了大陆99.75的汉字使用频率

于是中国人又设计了一套叫做GBK的编码,此编码方式是在GB2312的基础上进一步完善汉字编码,收录了27484个汉字,还包括少数民族文字。

3、Unicode

GBK是解决了中国人使用计算机的字符编码问题,但是计算机还有欧洲、亚洲比如日本、韩国等国家使用,他们同样面临着计算机编码问题,这样各国各立山头,设计自己的编码形式。其中的弊端可想而知,例如计算机想要显示多个各国家的字符,就得安装各式各样的字符库,占用大量计算机资源。于是统一联盟国际组织提出了Unicode编码,Unicode学名为“Universal Multiple-Obtet Coded Charater Set”,简称UCS。Unicode有两种格式:UCS-2和UCS-4。UCS-2就是两个字节编码,一共16位,这样理论上最多可以表示65536个字符,不过全世界所有将字符光汉字就有近10万个,因此Unicode4.0规范定义了一组附加的字符编码,UCS-4用4个字节(实际上只用了31位,最高位必须为0)。理论上涵盖了一切语言所用的符号。世界上任何一个字符都可以用Unicode编码来表示,一旦字符Unicode编码确定后就不会改变了。

但是Unicode有一定局限性,第一,Unicode字符在网络上传输或者最终存储起来的时候后,并不是每个字符都需要两个字节的,比如字符'A',用一个字节就可以表示字符,偏偏还要用两个字节,显然太浪费存储空间了。第二,一个Unicode字符保存到计算机里面时就是一串01数字,那计算机怎么知道一个2字节的Unicode字符是表示一个2字节的字符还是表示1字节的字符呢?如果不事先告诉计算机,那计算机就不知道如何解析编码数据。例如“汉”字的Unicode编码是6C49,可以用4个ASCII数字来传输、保存这个编码,也可以用UTF-8编码的3个连续字节E6 B1 89来表示它。关键在于双方都要统一,因此Unicode编码有不同的实现方式,比如UTF-8,UTF-16

4、UTF-8

UTF-8(Unicode Transformation Format)作为Unicode的一种实现方式,广泛应用于互联网,它是一种变长的字符编码,可以根据具体情况用1-4个字节来表示一个字符。比如英文字符这些原本就可以用ASCII码表示的字符用UTF-8表示时就只需要一个字节的空间,和ASCII码一样。对于多字节(n个字节)的字符,第一个字节的前n位都设为1,第n+1位设为0,后面字节的前两位都设为10.剩下的二进制位全部用该字符的Unicode码填充。

用汉字"好"字为例,“好”对应的Unicode是597D,对应的区间是0000 0800--0000 FFFF,因此它用UTF-8表示时需要用3个字节来存储,597D用二进制表示是:0101100101111101,填充到1110xxxx10xxxxxx10xxxxxx得到111001011010010110111101,转换为16进制:e5a5bd,因此“好”的Unicode“597D”对应的UTF-8编码是“E5A5BD”

posted @ 2018-04-10 16:07  快乐happy园  阅读(542)  评论(0)    收藏  举报