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