字符集编码知识详解
ASCII码是7位编码,编码范围是0x00-0x7F。ASCII字符集包括英文字母、阿拉伯数字和标点符号等字符。其中0x00-0x20和0x7F共33个控制字符。
只支持ASCII码的系统会忽略每个字节的最高位,只认为低7位是有效位。HZ字符编码就是早期为了在只支持7位ASCII系统中传输中文而设计的编码。早期很多邮件系统也只支持ASCII编码,为了传输中文邮件必须使用BASE64或者其他编码方式。
•ASCII码表
–在计算机中,通常用一个字节(8位)存放一个字符的ASCII码
00000000~01111111(高位补0)
如’a’的ascii编码97即为01100001
•汉字编码
–在计算机中,通常用扩展的ASCII码作为汉字编码
10000000~11111111(最高位置1)
如’中的编码为214,208即11010110 11010000’
Gb231280
GB2312码是中华人民共和国国家汉字信息交换用编码,全称《信息交换用汉字编码字符集--基本集》,由国家标准总局发布,1981年5月1日实施,通行于大陆。新加坡等地也使用此编码。
GB2312收录简化汉字及符号、字母、日文假名等共7445个图形字符,其中汉字占6763个。GB2312规定"对任意一个图形字符都采用两个字节表示,每个字节均采用七位编码表示",习惯上称第一个字节为"高字节",第二个字节为"低字节"。GB2312-80包含了大部分常用的一、二级汉字,和9区的符号。该字符集是几乎所有的中文系统和国际化的软件都支持的中文字符集,这也是最基本的中文字符集。其编码范围是高位0xa1-0xfe,低位也是0xa1-0xfe;汉字从0xb0a1开始,结束于0xf7fe。
GB2312将代码表分为94个区,对应第一字节(0xa1-0xfe);每个区94个位(0xa1-0xfe),对应第二字节,两个字节的值分别为区号值和位号值加32(2OH),因此也称为区位码。01-09区为符号、数字区,16-87区为汉字区(0xb0-0xf7),10-15区、88-94区是有待进一步标准化的空白区。GB2312将收录的汉字分成两级:第一级是常用汉字计3755个,置于16-55区,按汉语拼音字母/笔形顺序排列;第二级汉字是次常用汉字计3008个,置于56-87区,按部首/笔画顺序排列。故而GB2312最多能表示6763个汉字。
编码范围:0xA1A1--0xFEFE
汉字范围:0xB0A1--0xF7FE
编码方式:
GB2312规定"对任意一个图形字符都采用两个字节表示,每个字节均采用七位编码表示",习惯上称第一个字节为"高字节",第二个字节为"低字节"。
GB2312的编码范围为2121H-777EH,与ASCII有重叠,通行方法是将GB码两个字节的最高位置1以示区别。
GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。与ASCII有重叠,通行方法是将GB码两个字节的最高位置1以示区别。
背景知识:
GB2312码是中华人民共和国国家汉字信息交换用编码,全称《信息交换用汉字编码字符集--基本集》,由国家标准总局发布,1981年5月1日实施,通行于大陆。新加坡等地也使用此编码。该字符集是几乎所有的中文系统和国际化的软件都支持的中文字符集,这也是最基本的中文字符集。其编码范围是高位0xa1-0xfe,低位也是0xa1-0xfe;汉字从0xb0a1开始,结束于0xf7fe。16-87区为汉字区(0xb0-0xf7)。故而GB2312最多能表示6763个汉字。
备注:
·GB2312的原文还是区位码,从区位码到内码,需要在高字节和低字节上分别加上A0。
·在DBCS中,GB内码的存储格式始终是big endian,即高位在前。
·GB2312的两个字节的最高位都是1。但符合这个条件的码位只有128*128=16384个。所
以GBK和GB18030的低字节最高位都可能不是1。不过这不影响DBCS字符流的解析:在读取DBCS字符流时,只要遇到高位为1的字节,就可以将下两个字节作为一个双字节编码,而不用管低字节的高位是什么。
GBK编码
GBK是GB2312-80的扩展,是向上兼容的。它包含了20902个汉字
范围:0×8140 - 0xFEFE
汉字范围:
GBK/2:OXBOA1-F7FE,收录GB2312汉字6763个,按原序排列;
GBK/3:OX8140-AOFE,收录CJK汉字6080个;
GBK/4:OXAA40-FEAO,收录CJK汉字和增补的汉字8160个。
编码方式:
GBK亦采用双字节表示,总体编码范围为8140-FEFE之间,首字节在81-FE之间,尾字节在40-FE之间,剔除XX7F一条线。
字符集:
GBK共收入21886个汉字和图形符号,包括:
GB2312中的全部汉字、非汉字符号;
BIG5中的全部汉字;
与ISO-10646相应的国家标准GB13000中的其它CJK汉字;
以上合计20902个汉字。
其它汉字、部首、符号,共计984个。
背景知识:
GBK向下与GB2312完全兼容,向上支持ISO-10646国际标准,是一种过渡时期的编码实现方式。
GBK是GB2312-80的扩展,是向上兼容的。它包含了20902个汉字,其编码范围是0x8140-0xfefe,剔除高位0x80的字位。其所有字符都可以一对一映射到Unicode2.0。
备注:
微软公司自Windows 95简体中文版开始支持GBK代码,标准叫法是Windows codepage 936,也叫做GBK(国家标准),它也是8-bit的变长编码。据我所知GBK从来没成为正式的国家标准,只不过因为Windows的普及,它已经成为事实上的标准了。但目前的多数搜索引擎都不能很好地支持GBK汉字。