OpenType的cmap中platformID和encodingID是啥意思?
Posted
技术标签:
【中文标题】OpenType的cmap中platformID和encodingID是啥意思?【英文标题】:what's the meaning of platformID and encodingID in the cmap of OpenType?OpenType的cmap中platformID和encodingID是什么意思? 【发布时间】:2014-10-06 13:30:41 【问题描述】:规范(http://www.microsoft.com/typography/otspec/cmap.htm)只有platformID 3(windows)和platformID 1(Mac)以及windows平台的encodingID。 windows之外的其他平台和其他编码呢?
我使用 ttfdump
转储其中一种 adobe 字体,它给了我:
'cmap' Table - Character to Glyph Index Mapping Table
-----------------------------------------------------
'cmap' version: 0
number of encodings: 5
number of subtables: 3
Encoding 0. PlatformID: 0
EcodingID: 3
SubTable: 0, Offset: 0x00000a0e
Encoding 1. PlatformID: 0
EcodingID: 4
SubTable: 1, Offset: 0x0000cc26
Encoding 2. PlatformID: 1
EcodingID: 25
SubTable: 2, Offset: 0x0000002c
Encoding 3. PlatformID: 3
EcodingID: 1
SubTable: 0, Offset: 0x00000a0e
Encoding 4. PlatformID: 3
EcodingID: 10
SubTable: 1, Offset: 0x0000cc26
所以它确实有其他平台和编码,但在哪里可以找到定义?
【问题讨论】:
他们的实际文档在microsoft.com/typography/otspec/name.htm 是的。实际上 MS 文档中的链接已损坏,并且 ISO 文档中的章节编号错误。所以我一开始就错过了那张桌子。 【参考方案1】:您错过了说明更多信息在名称表文档中的文字,在 http://www.microsoft.com/typography/otspec/name.htm,其中包含每个平台支持的编码和语言的(长)列表。
【讨论】:
【参考方案2】:Microsoft documentation中有如下表格:
Platform ID | Platform name | Platform-specific encoding IDs | Language IDs
-------------|---------------|---------------------------------|--------------
0 | Unicode | Various | Various
1 | Macintosh | Script manager code | Various
2 | ISO [deprec] | ISO encoding [deprecated] | None
3 | Windows | Windows encoding | Various
4 | Custom | Custom | None
关于非标准编码 ID:
如果一个新的 Unicode 平台的编码 ID Unicode 版本移动字符,以便正确指定 字符代码语义。(由于 Unicode 稳定性策略,例如 没有预料到需要。) Unicode 之间的区别 特定于平台的编码 ID 1 和 2 仅出于历史原因; Unicode 标准实际上在曲目和编码方面是相同的 符合 ISO 10646。对于当前字体的所有实际用途, 编码 ID 0、1 和 2 提供的区别并不重要, 因此这些编码 ID 已被弃用。
一个新的编码 ID 当新的 cmap 子表时,有时也会分配 Unicode 平台 格式被添加到规范中,以便允许 与现有解析器的兼容性。例如,当 cmap 子表 格式 10 和 12 被添加到规范中,编码 ID 4 是 也添加了,当 cmap 子表格式 13 添加到 规范,添加了编码 ID 6。 cmap 子表格式 上表中列出的是唯一可用于 对应的编码ID。
【讨论】:
以上是关于OpenType的cmap中platformID和encodingID是啥意思?的主要内容,如果未能解决你的问题,请参考以下文章
Microsoft Windows OpenType Font (OTF)驱动程序无效数组远程代码执行漏洞(MS10-091)