【问题标题】:How does a Unicode character get mapped to a glyph in a font?Unicode 字符如何映射到字体中的字形?
【发布时间】:2011-04-04 17:17:02
【问题描述】:

我想知道,Unicode 中的每个字符都有一个代码点;字体中的字符的类似术语是什么?

当解码文件需要映射到字体(或字体,通过一些现代字体替换技术)时,我从来不理解该过程的一部分。

例如,当文本编辑器从其字符编码解码文件时,假设有希腊字母 α (U+03B1)。这个应用程序在字体中选择特定字形的确切过程是什么?大多数应用程序都有首选字体。假设它是快递。 (如果是罕见的 Unicode 字符,如心脏 ♥ (U+2665),它不在默认字体中,会发生什么情况?应用程序如何知道字体不包含该字符?)

字体是否包含有关它具有哪些符号的元信息?

如果 2 种字体都具有符号 alpha,它们是否必然共享相同的“代码点”?还是依赖于Type1、Type3、TrueType、OpenType等字体类型? ...

感谢任何指针或参考。

【问题讨论】:

    标签: unicode fonts


    【解决方案1】:

    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 的应用程序,它为您提供了很多关于字体的有趣信息。具体查看 Tools/Unicode Summary、Fonts/Font Analysis Utility 和 Fonts/Font Information,您可以在其中将整个字形映射表提取到剪贴板。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-16
    • 2019-02-22
    • 2012-09-29
    • 1970-01-01
    • 2012-02-16
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多