|
为了使计算机可以显示中文字符,所以必须设计一套中文字符编码。
早在 1980 年,GB2312 被设计出来,总共收录 7445 个字符,包括 6763 个汉字和 682 个其它符号。汉字区的内码范围高字节从 B0-F7,低字节从 A1-FE,也就是总共可以显示 (0xF7 - 0xB0 + 1) * (0xFE - 0xA1 + 1) 个汉字,即 72 * 94 = 6768 个,但是有 5 个空位(D7FA, D7FB, D7FC, D7FD, D7FE),这 5 个空位不显示汉字,所以可以显示的汉字共有 6768 - 5 = 6763 个
由于 GB2312 支持汉字太少,比如对于人名、古汉语等方面出现的罕用字 GB2312 并不能支持。时隔十五年后,即 1995 年时又制定了 GBK1.0。GBK1.0 一共收录了 21886 个字符。这个字符集分为两大区:汉字区 和 图形符号区;其中汉字区共收录 21003 个字符。
在 2000 年时,又制定了 GB18030 标准,这是对 GBK1.0 的一次扩展,它也是用以取代 GBK1.0 的国家标准。GB18030 共收录 27484 个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。现在的 PC 平台必须支持GB18030,对嵌入式产品暂不作要求。所以手机、MP3一般只支持GB2312。
从ASCII、GB2312、GBK 到 GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为0。GB2312、GBK 到 GB18030 都属于双字节字符集 (DBCS)。
GB2312 的分区表示法:GB 2312中对所收汉字进行了“分区”处理,每区含有94个汉字/符号。这种表示方式也称为区位码。
01-09区为特殊符号。
6-55区为一级汉字,按拼音排序。
56-87区为二级汉字,按部首/笔画排序。
10-15区及88-94区则未有编码。 举例来说,“啊”字是GB2312之中的第一个汉字,它的区位码就是1601。
字节结构:
在使用GB2312的程序中,通常采用EUC储存方法,以便兼容于ASCII。浏览器编码表上的“GB2312”,通常都是指 “EUC-CN” 表示法。
每个汉字及符号以两个字节来表示。第一个字节称为“高位字节”(也称“区字节)”,第二个字节称为“低位字节”(也称“位字节”)。
“高位字节”使用了 0xA1-0xF7 (把01-87区的区号加上0xA0),“低位字节”使用了 0xA1-0xFE (把01-94加上 0xA0)。 由于一级汉字从16区起始,汉字区的“高位字节”的范围是0xB0-0xF7,“低位字节”的范围是0xA1-0xFE,占用的码位是 72*94=6768。其中有5个空位是D7FA-D7FE。
例如“啊”字在大多数程序中,会以两个字节,0xB0(第一个字节) 0xA1(第二个字节)储存。
另外,GB 内码的存储格式始终是 big endian(大端格式),即高位在前,低位在后。
附 GB2312 简体中文编码表(PDF 格式):
网盘下载
在上面附件所示的编码表中,每一个区都会明显的以几行空白间隔开来。 |
|