我想知道,Unicode中的每个字符都有一个代码点;什么是字体中字符的类似术语?
当解码文件需要映射到字体(或字体,通过一些现代字体替换技术)时,我从未理解过程的这一部分。
例如,当文本编辑器从其字符编码中解码文件时,假设有希腊字母α(U + 03B1)。这个应用程序选择字体中特定字形的确切过程是什么?大多数应用程序都有首选字体。让我们说它是Courier。 (在一个罕见的Unicode字符的情况下会发生什么事情,如心脏♥(U + 2665),这不是默认字体?应用程序如何知道字体不包含该字符?)
字体是否包含有关它具有哪些符号的元信息?
如果2个字体都有符号alpha,那么它们是否必须共享相同的“代码点”?或者它是否依赖于字体类型,如Type1,Type3,TrueType,OpenType? ...
感谢任何指针或参考。
答案 0 :(得分:31)
TrueType字体由许多部分组成,对于这个问题,最重要的是一个“字形”表和一个用于将字符映射到这些字形的表(“cmap”)。
简而言之,操作系统使用“cmap”表将字符转换为字形索引,将默认字形替换为任何没有匹配条目的字形。不幸的是,有多个版本的字体文件规范(更不用说不同类型的字体)和这些表中相同映射的不同字符编码,所以实际进行映射的过程,并有效地进行,以便文本绘制快速,结果非常复杂。
“代码点”完全独立于字符,编码和字体。一个特定的代码点是通用的,但它有很多编码(UTF-8,UTF-16等),它将映射到不同字体的不同字形索引。
Apple的开发人员文档有关TrueType字体细节的相当不错的部分:
http://developer.apple.com/fonts/ttrefman/
具体做法是:
字形表:https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6glyf.html
角色地图:https://developer.apple.com/fonts/TrueType-Reference-Manual/RM06/Chap6cmap.html
我还推荐一个名为BabelMap的应用程序,它为您提供了许多有关字体的有趣信息。具体来看工具/ Unicode摘要,字体/字体分析实用程序和字体/字体信息,您可以在其中将整个字形映射表提取到剪贴板。