Win32之字符编码
字符编码
1、原始的ASCII编码
在计算机里面真正存储的是字符对应的编码,而不是字符本身。
ASCII码只用了一个字节来表示字符,表示的比较少,最多表示255个字符,范围是0x00-0xFF。但实际上原始的ASCII码只是使用了0x00-0x7F中间的字符,0x80-0xFF中间的字节并没有使用。
2、ASCII码的拓展 以及GB2312或GB2312-80
2.1 产生的原因
在英语中,用128个符号编码便可以表示所有,但是用来表示其他语言,128个符号是不够的。后来有些国家利用字节中闲置的最高位编入新的符号,这样编码的范围就是0x00-0xFF,可以表示256个符号。这种编码称为ASCII码的扩展。
2.2 扩展ASCII编码
扩展ASCII编码的编码范围是 1000 0000 - 1111 1111 ,即0x8F-0xFF。加上ASCII编码一共可以表示256个字符。
但是汉语的字符有10万以上,256个字符显然不能满足汉语字符的表示,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国将ASCII码再进行扩展,便有了GB2312编码。
2.3 GB2312编码
GB2312 兼容标准 ASCII码,采用扩展 ASCII 码的编码空间进行编码,一个汉字占用两个字节,每个字节的最高位为 1。
例如“你好”的编码的GB2312编码的16进制是 E3 C4 C3 BA。“你”的编码是E3 C4 二进制就是 1110 0011 1100 0100,其中1110 0011就是一个扩展ASCII码,1100 0100也是一个扩展ASCII码。
2. 4 出现的问题
除了中国,其他国家也为了适应自己国家的字符对ASCII码进行扩展,相同的16位的1110 0011 1100 0100编码,在中国表示字符“你好”,但是到其他国家就会表示成其他符号,各个国家之间的编码并不统一,极易出现乱码现象,不能满足跨语言、跨平台进行文本转换、处理的需求。
3、UNICODE编码
3.1 Unicode编码
Unicode是一种编码方案,全世界所有文字都有唯一一个二进制来表示,也就是说每一个字符都有唯一一个二进制编码来表示,可以满足跨语言、跨平台进行文本转换、处理的要求。
Uni