1. ASCII(American Standard Code for Information Interchange)

这种编码占用7个Bit,在计算机中占用一个字节,8位,最高位没用,通讯的时候有时用作奇偶校验位。因此ASCII编码的取值范围实际上是:0x00-0x7f,只能表示128个字符。后来发现128个不太够用,做了扩展,叫做ASCII扩展编码,用足八位,取值范围变成:0x00-0xff,能表示256个字符。其实这种扩展意义不大,因为256个字符表示一些非拉丁文字远远不够,但是表示拉丁文字,又用不完。所以扩展的意义还是为了下面的ANSI编码服务。

2. ANSI(American National Standard Institite )

每个国家有自己的ANSI标准,自己过国家自己负责编码。ASCII还是在ANSI的字符集内的,其他国家不能占用。例如中国的ANSI用的是GB2312标准,不过GB2312是GBK的子集。GBK和GB2312的编码范围不同。不过都是用2个字节的范围来表示汉字。ANSI由于各国自己定制,所以ANSI编码到底用几个字节来表示要看国家。

ANSI的重要问题就是由于各国编码不同会出现编码重叠

3.MBCS(Multi-Byte Chactacter System(Set))

多字节字符系统或者字符集,基于ANSI编码的原理上,对一个字符的表示实际上无法确定他需要占用几个字节的,只能从编码本身来区分和解释。因此计算机在存储的时候,就是采用多字节存储的形式。也就是你需要几个字节我给你放几个字节,比如A我给你放一个字节,比如"中“,我就给你放两个字节,这样的字符表示形式就是MBCS。在基于GBK的windows中,不会超过2个字节,所以windows这种表示形式有叫做DBCS(Double-Byte Chactacter System),其实算是MBCS的一个特例。C语言默认存放字符串就是用的MBCS格式。从原理上来说,这样是非常经济的一种方式。

4. Unicode(Universal Code)

4个字节的编码范围

unicode有多种表示编码的方式:

4.1 UTF-8

这个方案的意思以8位为单位来标识文字,注意并不是说一个文字用8位标识。他其实是一种MBCS方案,可变字节的。到底需要几个字节表示一个符号,这个要根据这个符号的unicode编码来决定,最多4个字节(1,2,3,4字节均可)。

4.2 UTF-16

16位为单位来标识,也就是说1个字符可能占用2字节,也可能占用4字节。占用2字节的时候寻址范围是0-2^(16-1),绝大部分字符的编码范围2字节都足够满足了。一般说的unicode编码都指的是utf-16