GBK

来自GSXAB的知识库
GBK
术语名称 GBK
英语名称 GBK

GBK[1]中国全国信息技术标准化技术委员会制定的技术规范指导性文件,是官方字符集字符编码之一,标准名为《汉字内码扩展规范》,制定于 1995 年。这一编码向后兼容 GB 2312 ,同时对当时发布的 Unicode 1.1 标准(国内以 GB 13000.1 的形式接受这一标准)中的全部中日韩汉字进行支持。一般称之为 GBK 。

在 GB 2312 内码范围为双字节 0xA0-FF 的基础上, GBK 将编码范围扩展至 0x8140-FEFE (除去低字节为 0x7F 的)。由于 GBK 直接指定了双字节编码位置,一般不考虑对 GBK 字符集使用其他字符编码方案。

字符集特征

收录了 GB 2312 及 GB 13000.1 中的汉字和非汉字符号,字符集中一共有 21886 个字符,其中含汉字 21003 个,符号 883 个[2]

码位特征

与之前的 GB 2312 不同,这一字符集中的码位直接使用内码标记,且不再空出 0x80-0x9F ,而是允许所有高字节在 0x80-FE ,低字节在 0x40-FE (排除 0x7F)的范围。其中存在空位。

具体分配如下:

  • 汉字区:
    • GB 2312 汉字区, GBK/2 区,包含 GB 2312 一二级汉字 6763 个,按原来的机内码占据 0xB0A1-F7FE 。
    • GB 13000.1 扩充汉字区:
      • GBK/3 区,包含 GB 13000.1 汉字 6080 个,占据 0x8140-A0FE (不含 0x??7F)。
      • GBK/4 区,包含 CJK 汉字和增补汉字 8160 个,占据 0xAA40-FEA0 (不含 0x??7F)。
  • 图形符号区:
    • GB 2312 非汉字符号区, GBK/1 区,包含 GB 2312 特殊符号,并补充了来自 GB 12345 的符号,共计 717 个,按原来范围占据 0xA1A1-A9FE 。
    • GB 13000.1 扩充非汉字区, GBK/5 区,包含 GB 13000.1 扩充非汉字区 166 个,占据 0xA840-A9A0 (不含 0x??7F)。
  • 用户自定义区:
    • 0xAAA1-AFFE ,共计 564 个。
    • 0xF8A1-FEFE ,共计 658 个。
    • 0xA140-A7A0 ,共计 672 个。这一区标记为限制使用,因为不排除在此增补字符。

常见编码

GBK 编码

GBK 的字符编码通常直接使用上述双字节码位作为字符编码。这一编码就称为 GBK 。

微软代码页 936

见词条 微软代码页 936

使用

GBK 机内码是 微软代码页 936 的基础,在中国大陆随着 Windows 系统被广泛使用,几乎全部汉字处理、通信等该场景都能看到这一字符编码。但是由于 GBK 诞生于 1995 年,其前任且完全兼容的 GB 2312 诞生于 1980 年,而其继任者 GB 18030 诞生于 2000 年,但是不再是双字节编码,因此实际上,限制双字节的场景(如 windows 通过 DBCS 能力支持)往往继续以 GB 2312 的名字使用,而不限制的场景又都直接说 GB 18030 中的某个范围,或者直接用 Unicode ,所以这一字符集尽管被广泛使用,名称上却很少出现。

趋势上, GBK 的场景会被 GB18030 和 UTF-8 取代,但是这两个对于非 ASCII 部分都是变长编码,只有在无法支持更长字节数字符的场景可能仍然停留在 GBK 编码上。


常见字符编码
早期编码 电报码、 BCD 码BCDICEBCDIC)、ASCIIISO 646
ISO 8859 ISO 8859-1 、 ISO 8859-2 、……
国标系列 IBM 代码页 936 / GB 2312微软代码页 936 / GBK微软代码页 54936 / GB 18030
Unicode / ISO 10646 UTF-7 、 UTF-8UTF-16UTF-32