[TOC]
0x00 基础介绍 中文字符标准编码: 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即第一个为负数(少数为特例)第二个为正数或者负数
;
[TOC]
0x00 基础介绍 中文字符标准编码: 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即第一个为负数(少数为特例)第二个为正数或者负数
;1 2 3 4 5 6 7 8 9 10 11 12 public static void main (String[] args) { System.out.println('中' + 0 ); System.out.println('文' + 0 ); byte [] arr = "中文" .getBytes(); for (Byte b : arr) { System.out.print( b + " " ); } }