####

中文字符标准编码:
GBK,GB2312,GB18030

产生原因:

  • 空间占用
    因为UTF-8是Unicode的一种实现,所以他包含了世界上的所有文字的编码,但是他采用的是1-4字节进行编码。
    对于那些排在前面优先纳入的文字,可能就优先使用1字节、2字节存储了,对于后纳入的文字,就要使用3字节或者4字节存储了,所以UTF-8对存储空间要求就会很大。
    对于常用的汉字在UTF-8中采用3字节进行编码,但是如果有一种只包含中文和ASCII的编码的话,就不需要使用3个字节可能2个字节就够了。

  • 一种编码基本都是只服务一个国家或者地区的,比如一个中国的网站,一般会出现简体字和繁体字以及一些英文字符,很少会出现日语或者韩文的

也是出于这样的考虑中国国家标准总局于1981年制定并实施了 GB 2312-80 编码,即中华人民共和国国家标准简体中文字符集。后来厂商微软利用GB2312-80未使用的编码空间,收录GB 13000.1-93全部字符制定了GBK编码。

有了标准中文字符集,如果是一个纯中文网站,就可以可以采用这种编码方式,这样可以大大节省一些存储空间的。

常用的中文编码有GBK(常用),GB2312,GB18030:

  • GB2312(1980年):16位字符集,收录有6763个简体汉字,682个符号,共7445个字符;
    优点:适用于简体中文环境,属于中国国家标准,通行于大陆,新加坡等地也使用此编码;
    缺点:不兼容繁体中文,其汉字集合过少。

  • GBK(1995年):16位字符集,收录有21003个汉字,883个符号,共21886个字符;
    优点:适用于简繁中文共存的环境,为简体Windows所使用,向下完全兼容gb2312,向上支持 ISO-10646 国际标准 ;所有字符都可以一对一映射到unicode2.0上;
    缺点:不属于官方标准,和big5之间需要转换;很多搜索引擎都不能很好地支持GBK汉字。

  • GB18030(2000年):32位字符集;收录了27484个汉字,同时收录了藏文、蒙文、维吾尔文等主要的少数民族文字。
    优点:可以收录所有你能想到的文字和符号,属于中国最新的国家标准;
    缺点:目前支持它的软件较少。

在Java中开发采用GBK编码中文字符默认占用2B,其中表现形式为-42 -48即第一个为负数(少数为特例)第二个为正数或者负数;

public static void main(String[] args) {
44//中文字符GBK码表
44System.out.println('中' + 0); //gbk码表一一对应
44System.out.println('文' + 0);
44//JAVA表现形式
44byte[] arr = "中文".getBytes();
44for (Byte b : arr) {
444System.out.print( b + " ");
44}
44//中 : -42 -48
44//文 : -50 -60
4}