从ASCII编码到UNICODE编码

来源:互联网 发布:拯救者y50p优化系统 编辑:程序博客网 时间:2024/06/03 03:58

       计算机产生之初,在美国,使用8个二进制数,即一个字节去表示字符就足够了,编码0-9,A-Z,a-z,一些特殊的符号,128个完全够用,这就是最初的ASCII编码,为了编码一些特殊的图形,以及一些外国语言,还要用到剩下的128个编码,这就是扩展ASCII;后来慢慢地计算机走向全世界,发现这样子编码是完全不够的,比如我们国家的汉字,远远超过了256个,这时候就想到了用两个字节去编码,共有2^16=66536种情况,但是相应的也就有了问题,原来的ASCII码怎么处理,不能说你编了汉字之后,原来的英文字符就不能用了,所以解决办法是用高字节用0xA1-0xF7,低字节用0xA1-0xFE来表示一个汉字,原来0-127编码的英文字符照样用,再后来发现还不够,就干脆对于低字节的部分不限制,当读到在高字节范围内的编码,就认为下一个字节是低字节的编码,这就是最初的GBK,国标码,这是属于双字节编码的(DBCS),但是这也就出现了问题,就是统一的问题,就拿汉字来说,中国、台湾、香港编码都不一样,不同的双字节编码完全不兼容。在这样的背景下,就出现了UNICODE,它是国际组织统一制定的,规定所有字符都是两个字节,包括英文字符(高位填零),并且将其他的语言进行了编码。UNICODE做到了统一,但是也是一种浪费,因为对于英文来说,完全浪费了一个字节。随着内存的增大,对于内存方面的限制越来越宽松,同时互联网发展,文件的传输,需要字符做到统一。在具体实现UNICODE码时,就出现了UTF-8,UTF-16,UTF-32。

      另外字符编码中经常看到ANSI、UNICODE BIG ENDIAN,ANSI全称是AMERICAN NATIONAL STANDARDS INSTITUTE,美国国家标准协会,此处代表设定的标准,那些一系列的即用单字节又用双字节表示的字符集,都看成ANSI,对于计算机中的ANSI,不同的系统是不一样的,可能是GBK,也有可能是其他的,而UNICODE BIG ENDIAN还有相对的little endian,限定的是码的存储格式,前者是高字节在高位,后者相反。

     为了实现统一,Windows中程序都是UNICODE编码的,即使是非UNICODE编码,也会进行隐式的转化,所以写程序时最好写成UNICODE字符集的原因,虽然改成多字符集的形式,既支持单字节,又支持双字节,但是这样会使程序多许多隐式的转换,这是不可取的。

0 0