字库内码,字库的编码平台

来源 千千秀字 发布时间 2014-12-29

字库内码

字库都会设置内码以便于程序调用字库的文字,通用字库中一般采用 Unicode 编码标准,微软平台字库中通常选择“microsoft unicode BMP only”编码系统,意为“微软平台的只在基本多文种平面的 Unicode 编码”,BMP 是 Basic Multilingual Plane 的简写,称为基本多文种平面,或是 0 号平面(Plane 0),是 Unicode 中的一个编码区段,编码从 U+0000 至 U+FFFF。这个编码范围限定每个字符占用两个字节,一共最多可以表示 65536 个字符。

说到 Unicode 必须同时说一说 UCS-2UCS-4

早期 Unicode 在编制通用字符集之时,ISO 组织也在做同样的事情,ISO 开展了 ISO/IEC 10646 项目,名字叫“ Universal Multiple-Octet Coded Character Set”,中文译为“通用多八位编码字符集”,英文简称UCS。

后来,双方意识到不需要同时制定两套通用的字符集,所以双方开始进行整合,到 Unicode 2.0 时,Unicode 编码和 UCS 编码都基本一致。

UCS-2 采用 16 位存储空间,两个字节编码每个字符,而 UCS-4 采用 4 个字节(实际上只用了 31 位,最高位必须为 0)编码。UCS-2 有 216=65536 个码位,UCS-4 有 231=2147483648 个码位。

UCS-4 根据最高位为 0 的最高字节分成 27=128 个组(group)。每个组再根据次高字节分为 256 个平面(plane)。每个平面根据第 3 个字节分为 256 行 (rows),每行包含 256 个单元(cells)。当然同一行的单元只是最后一个字节不同,其余都相同。

0 组的 0 号平面被称作 Basic Multilingual Plane,即基本多文种平面,简写 BMP。可知 BMP 区域内的字符只使用了两个字节,码位从 U+0000 至 U+FFFF。它实际上就是 UCS-2 的全部编码范围,后来因为码位不够用才扩展为 UCS-4。

Unicode 最初也是采用两个字节编码字符,后来发现不够用才扩展为四个字节(与 UCS-4 对应)。理论上 UCS-4 编码范围能达到 U+7FFFFFFF,容纳二十多亿个字符,但是因为 Unicode 和 ISO 达成共识,只会用到 17 个平面,包含 1 个基本平面(BMP)和 16 个辅助平面,最高码位 U+10FFFF。

平面 编码范围 中文名称 英文名称
0号平面 U+0000 - U+FFFF 基本多文种平面 Basic Multilingual Plane,简称BMP
1号平面 U+10000 - U+1FFFF 多文种补充平面 Supplementary Multilingual Plane,简称SMP
2号平面 U+20000 - U+2FFFF 表意文字补充平面 Supplementary Ideographic Plane,简称SIP
3号平面 U+30000 - U+3FFFF 表意文字第三平面 Tertiary Ideographic Plane,简称TIP
4~13号平面 U+40000 - U+DFFFF (尚未使用)  
14号平面 U+E0000 - U+EFFFF 特别用途补充平面 Supplementary Special-purpose Plane,简称SSP
15号平面 U+F0000 - U+FFFFF 保留作为私人使用区(A区) Private Use Area-A,简称PUA-A
16号平面 U+100000 - U+10FFFF 保留作为私人使用区(B区) Private Use Area-B,简称PUA-B

字库中的编码平台

字库中都要指定编码平台,用 FontCreator 打开字库文件,通常你会看到这些选项:

Macintosh Roman
Microsoft Unicode BMP only [ 新版对应: Windows Unicode BMP (UCS-2) ]
Microsoft Unicode full repertoire [新版对应: Windows Unicode UCS-4 ]

Macintosh Roman 是苹果系统用的;下面两项是微软 Windows 系统用的。其中 BMP only 意指编码范围仅限基本多文种平面(Basic Multilingual Plane),最多容纳 65536 个字符;full repertoire 意指能容纳全部 Unicode 字符。

关于编码平台,可参考:OpenType 字体文件命名表

QQXIUZI.CN 千千秀字