1. GB2312

GB2312字符集由中国国家标准总局1980年发布,其中收录了6763个常用汉字和682个其它符号(6763+682=7445),并将该字符集分为94个区,每个区94位,每个位对应一个字符或零个字符(94x94=8836,8836-7745=1391说明有1391个位置是空的)。

区号 内容
01-09区 特殊符号,如:标点符号、数字序列、全角字符、日语假名、拼音音标等
10-15区
16-55区 一级汉字,按拼音排序
56-87区 二级汉字,按部首/笔画排序
88-94区

如果将GB2312看做是一种“字符集”,则可以用多种编码方式对它进行编码。比如“区位码”就是对GB2312字符集最简单的一种编码方式,它直接使用区号和位号组成一个编码值(例如:GB2312字符集中的第一个汉字“啊”,它的区号为16,位号为01,它的区位码就是1601)。这里GB2312 编码列出了GB2312区位码编码。

但通常,人们所说的GB2312指的是一种编码(并且不是指区位码),它是指通常采用EUC方法对GB2312字符集中的“区”和“位”进行处理后的编码。EUC方法的处理方式:区号和位号分别加上0xA0,结果分别作为GB2312编码的两个字节的值(例如:“啊”字的区号和位号分别为16和01,即十六进制0x10和0x01,分别加0xA0得到编码0xB0A1),这样做是为了兼容ASCII编码(GB2312编码的俩字节都大于ASCII码的最大值)。这里GB2312简体中文编码表列出了通常更常用的GB2312编码。

有趣的是:GB2312中也收录了英文字母和数字等符号(ASCII码中也有这些符号),并且仍然是以俩字节编码,于是GB2312中的英文字母和数字等就成了我们平常所说的全角符号,而ASCII码的符号就叫做半角符号

关于GB2312还有另一种声音:谁设计的GB2312,被日笨人说是抄的,尼玛,汉字都是我大中华的,谁抄谁啊…_

2. Big5

维基上说:Big5是由台湾财团法人信息产业策进会为五大中文套装软件(并因此得名Big-5)所设计的中文共通内码,在1983年12月完成公告。那个之前还没有繁体字编码,GB2312又不含繁体字,因此才有了Big-5。

传说Big5产生前,有着“中文电脑之父”之称的朱邦复也设计了一套中文编码,可容纳50000多字(包括繁体和简体),但是未被采纳。

3. GBK

话说Unicode 1.1推出时,收录了两万多个中日韩通用字符集的汉字,同一年我国也定制了相应的GB13000,但是一直未被业界采用。而微软利用了GB2312中未使用的编码空间,并且收录了GB13000中的全部字符,从而定制了GBK编码(虽然收录了GB13000的全部字符,但是编码方式并不相同),并且实现于Windows95中文版中。GBK自身并非国家标准,不过1995年由国标局等机构确定为“技术规范指导性文件”。

<mark>简单地说:GBK是从GB2312扩展而来的,支持繁体,并且兼容GB2312</mark>。

GBK编码范围:8140-FEFE。

GBK编码,是对GB2312编码的扩展,因此完全兼容GB2312-80标准。GBK编码依然采用双字节编码方案,其编码范围:8140-FEFE,剔除xx7F码位,共23940个码位。共收录汉字和图形符号21886个,其中汉字(包括部首和构件)21003个,图形符号883个。GBK编码支持国际标准ISO/IEC10646-1和国家标准GB13000-1中的全部中日韩汉字,并包含了BIG5编码中的所有汉字。GBK编码方案于1995年12月15日正式发布,这一版的GBK规范为1.0版

一、字汇

GBK 规范收录了 ISO 10646.1 中的全部 CJK 汉字和符号,并有所补充。具体包括:

  1. GB 2312 中的全部汉字、非汉字符号。
  2. GB 13000.1 中的其他 CJK 汉字。以上合计 20902 个 GB 化汉字。
  3. 《简化字总表》中未收入 GB 13000.1 的 52 个汉字。
  4. 《康熙字典》及《辞海》中未收入 GB 13000.1 的 28 个部首及重要构件。
  5. 13 个汉字结构符。
  6. BIG-5 中未被 GB 2312 收入、但存在于 GB 13000.1 中的 139 个图形符号。
  7. GB 12345 增补的 6 个拼音符号。
  8. 汉字“〇”。
  9. GB 12345 增补的 19 个竖排标点符号(GB 12345 较 GB 2312 增补竖排标点符号 29 个,其中 10 个未被 GB 13000.1 收入,故 GBK 亦不收)。
  10. 从 GB 13000.1 的 CJK 兼容区挑选出的 21 个汉字。
  11. GB 13000.1 收入的 31 个 IBM OS/2 专用符号。
    12.未录入《新华字典》上的一些字,如“韡”的简体。

二、码位分配及顺序

GBK 亦采用双字节表示,总体编码范围为 8140-FEFE,首字节在 81-FE 之间,尾字节在 40-FE 之间,剔除 xx7F 一条线。总计 23940 个码位,共收入 21886 个汉字和图形符号,其中汉字(包括部首和构件)21003 个,图形符号 883 个。

全部编码分为三大部分:

  1. 汉字区。包括:
    a. GB 2312 汉字区。即 GBK/2: B0A1-F7FE。收录 GB 2312 汉字 6763 个,按原顺序排列。
    b. GB 13000.1 扩充汉字区。包括:
    (1) GBK/3: 8140-A0FE。收录 GB 13000.1 中的 CJK 汉字 6080 个。
    (2) GBK/4: AA40-FEA0。收录 CJK 汉字和增补的汉字 8160 个。CJK 汉字在前,按 UCS 代码大小排列;增补的汉字(包括部首和构件)在后,按《康熙字典》的页码/字位排列。
    (3) 汉字“〇”安排在图形符号区GBK/5:A996。

  2. 图形符号区。包括:
    a. GB 2312 非汉字符号区。即 GBK/1: A1A1-A9FE。其中除 GB 2312 的符号外,还有 10 个小写罗马数字和 GB 12345 增补的符号。计符号 717 个。
    b. GB 13000.1 扩充非汉字区。即 GBK/5: A840-A9A0。BIG-5 非汉字符号、结构符和“〇”排列在此区。计符号 166 个。

  3. 用户自定义区:分为(1)(2)(3)三个小区。
    (1) AAA1-AFFE,码位 564 个。
    (2) F8A1-FEFE,码位 658 个。
    (3) A140-A7A0,码位 672 个。
    第(3)区尽管对用户开放,但限制使用,因为不排除未来在此区域增补新字符的可能性。

三、字形

GBK 对字形作了如下的规定:

  1. 原则上与 GB 13000.1 G列(即源自中国大陆法定标准的汉字)下的字形/笔形保持一致。
  2. 在 CJK 汉字认同规则的总框架内,对所有的 GBK 编码汉字实施“无重码正形”(“GB 化”);即在不造成重码的前提下,尽量采用中国新字形。
  3. 对于超出 CJK 汉字认同规则的、或认同规则尚未明确规定的汉字,在 GBK 码位上暂安放旧字形。这样,在许多情况下 GBK 收入了同一汉字的新旧两种字形。
  4. 非汉字符号的字形,凡 GB 2312 已经包括的,与 GB 2312 保持一致;超出 GB 2312 的部分,与 GB 13000.1 保持一致。
  5. 带声调的拼音字母取半角形式。

若要查询具体字符的编码请前往:汉字字符集编码查询

GBK 编码表

参看:https://www.qqxiuzi.cn/zh/hanzi-gbk-bianma.php

4. GB18030

GB2312和GBK都是用两个字节来编码的,就算用完所有的位(256*256=65536)也不够为所有的汉字编码。于是就有了目前最新的GB18030,它采用类似UTF-8的编码方式进行编码(每个字符的编码可以是1、2或4个字节),拥有上百万个编码空间,足以支持中日韩三国所有汉字,并且还可以支持国内少数民族的文字。

5. CJK

CJK:中日韩统一表意文字(CJK Unified Ideographs)。在Unicode中,收集各国相同的汉字,并且进行合并相同的编码点(code point)上,可以避免相同文字重复编码,浪费编码空间。

参考:

本系列文章包括:

参考文献:

  1. 汉字编码:GB2312, GBK, GB18030, Big5