0%

GBK、GB2312和GB18030

GB2312-80

GB 2312或GB 2312-80 是中国国家标准简体中文字符集
全称《信息交换用汉字编码字符集·基本集》,又称GB0,由中国国家标准总局发布,1981年5月1日实施。
GB2312编码通行于中国大陆;新加坡等地也采用此编码。中国大陆几乎所有的中文系统和国际化的软件都支持GB 2312。

GB 2312标准共收录6763个汉字,其中一级汉字3755个,二级汉字3008个;
同时收录了包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个字符。

  • GB 2312的出现,基本满足了汉字的计算机处理需要,它所收录的汉字已经覆盖中国大陆99.75%的使用频率。
  • 对于人名、古汉语等方面出现的罕用字,GB 2312不能处理,这导致了后来GBK及GB 18030汉字字符集的出现。

GB2312对任意一个图形字符都采用两个字节表示,并对所收汉字进行了“分区”处理,每区含有94个汉字/符号,
分别对应第一字节和第二字节。这种表示方式也称为区位码。

  • 01-09区为特殊符号。
  • 16-55区为一级汉字,按拼音排序。
  • 56-87区为二级汉字,按部首/笔画排序。
  • 10-15区及88-94区则未有编码。

GB2312的编码范围为2121H-777EH,与ASCII有重叠,通行方法是将GB码两个字节的最高位置1以示区别。

GBK

GBK即汉字内码扩展规范,K为汉语拼音 Kuo Zhan(扩展)中“扩”字的声母。英文全称Chinese Internal Code Specification。

GBK共收入21886个汉字和图形符号,包括:

  • GB2312中的全部汉字、非汉字符号。
  • BIG5中的全部汉字。
  • 与ISO 10646相应的国家标准GB13000中的其它CJK汉字,以上合计20902个汉字。
  • 其它汉字、部首、符号,共计984个。

GBK向下与GB2312 完全兼容,向上支持ISO 10646国际标准,在前者向后者过渡过程中起到的承上启下的作用。

GBK 采用双字节表示,总体编码范围为8140-FEFE之间,首字节在81-FE之间,尾字节在40-FE之间,剔除XX7F一条线。GBK编码区分三部分:

  • 汉字区:
    • GBK/2:OXBOA1-F7FE, 收录GB2312汉字6763个,按原序排列;
    • GBK/3:OX8140-AOFE,收录CJK汉字6080个;
    • GBK/4:OXAA40-FEAO,收录CJK汉字和增补的汉字8160个。
  • 图形符号区:
    • GBK/1:OXA1A1-A9FE,除GB2312的符号外,还增补了其它符号
    • GBK/5:OXA840-A9AO,扩除非汉字区。
  • 用户自定义区
    • GBK区域中的空白区,用户可以自己定义字符。

GB18030

GB 18030,全称:国家标准GB 18030-2005《信息技术中文编码字符集》
是中华人民共和国现时最新的内码字集,是GB 18030-2000《信息技术信息交换用汉字编码字符集基本集的扩充》的修订版。
GB 18030与GB 2312-1980完全兼容,与GBK基本兼容,支持GB 13000及Unicode的全部统一汉字,共收录汉字70244个。

  • 与 UTF-8 相同,采用多字节编码,每个字可以由1个、2个或4个字节组成。
  • 编码空间庞大,最多可定义161万个字符。
  • 支持中国国内少数民族的文字,不需要动用造字区。
  • 汉字收录范围包含繁体汉字以及日韩汉字

GB18030 编码是一二四字节变长编码。

  • 单字节,其值从0到0x7F,与 ASCII 编码兼容。
  • 双字节,第一个字节的值从0x81到0xFE,第二个字节的值从0x40到0xFE(不包括0x7F),与 GBK标准基本兼容。
  • 四字节,第一个字节的值从0x81到0xFE,第二个字节的值从0x30到0x39,第三个字节从0x81到0xFE,第四个字节从0x30到0x39。

CP936

代码页936(Codepage 936)是 Microsoft 的简体中文字元集标准
是东亚语文的四种双字节字元集(DBCS)之一。其最初版本和 GB 2312 一模一样,
但在推出 Windows 95 时扩展成包含绝大部分的 GBK 字元(代码页936 比 GBK 少95个字元,皆为当时尚未收入 Unicode 的字元);
虽然该等字元现在已全部收入 Unicode,但代码页936 至今都没有修订。

libiconv

几个函数入口及相关转换表:

static int ces_gbk_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n);
static int gbk_mbtowc (conv_t conv, ucs4_t *pwc, const unsigned char *s, int n);

重要头文件:

lib/encodings.def
lib/ces_gbk.h
lib/gbk.h
lib/gb2312.h
lib/cp936ext.h
  1. GB 2312
  2. GB2312简体中文编码表
  3. 汉字内码扩展规范
  4. GB 18030
  5. 代码页936
  6. Unicode code converter
  7. 中文編碼網頁GB18030
  8. International Components for Unicode ː Repository Browser
  9. GB2312-80 to Unicode table
  10. GB18030 Conversion Documentation