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