述ASCII GBK与UTF8编码范围

众所周知ASCII码是使用指定的7位或8位二进制数组合来表示128或256种可能的字符。ASCII编码可以表示的最大字符数年是256,其实英文字符并没有那么多,一般只用前128个(最高位为了0),其中包括了控制字符、数字、大小写字母和其他一些符号。而最高为1的另128个字符为“扩展ACSII”。128个字符,其中0x00~0x1F(0~31)、)、0x7F(127)是控制符。其他编码0x20~0x7E(32~126)则定义实际可见的字符,包括数字、大小写英文字母、标点符号等。

GBK编码
GBK是国家标准编码,它是对gb2312的扩展,定义了包含简体中文、繁体中文、日文、韩文等所用的字符。现在常用的Windows简体中文系统默认就是使用这种编码方式来解释字符的。在编码上,GBK采用了单双字节混合的方式。它兼容ASCII,因些0x~07F部分的定义和ASCII一样。对其他字符,它使用两个字节来表示,但弟一个字符最高位必须是1,即必须是0x80~0xFF,以便在解码时和兼容ASCII的字符区别,弟二个字节则没此限制。

解码时,需要逐个字节检查具体如下:
1.如果这个字节的范围是0x00~0x7F,即最高位是0时,这个字节本身就代表一个字符,和ASCII的含义相同。
2.如果字节范围0x80~0xFF,即最高位为1时,还需要再取下一个字节,两个字节合起来才表示一个字符。GB_2312 字符集包含了 6763个的 简体汉字,和682 个标准中文符号。在这个标准中,每个汉字用2个字节来表示,每个字节的ascii码为 161-254 (16 进制A1 - FE),第一个字节 对应于 区码的1-94 区,第二个字节 对应于位码的1-94 位。

UTF8编码
在UTF-8里,英文字符仍然跟ASCII编码一样,因此原先的函数库可以继续使用。而中文的编码范围是在0080-07FF之间,因此是2个字节表示(但这两个字节和GB编码的两个字节是不同的),用专门的Unicode处理类可以对UTF编码进行处理,三个字节则用于中文简、中文繁等。

对应UCS-2的字符  UTF-8字节数据编码/解释
U+0000 - U+007F 0*** ****(0x00~0x7F) 字节最高位为了0,则它表示一个字符,和ASCII解释一样

U+0080 - U+07FF 110* ****  10** ****(0xC0~0xDF)  字节最高三位是110,则这是双字节编码,用于其他字母字符

U+0800 - U+FFFF 1110 ****  10** ****  10** ****(0xE0~0xEF)  字节最高四位是1110,则这是三字节编码,用于其他字符,如中文简繁等

你可能感兴趣的:(windows)