2010-08-27 105 views
31

我在想,Unicode中的每個字符都有一個代碼點;字體中字符的類似術語是什麼?如何將Unicode字符映射到字體中的字形?

當解碼文件需要映射到字體(或字體,通過一些現代字體替換技術)時,我從不理解過程的一部分。

例如,當一個文本編輯器從其字符編碼解碼文件,並假設有希臘字母α(U + 03B1)。這個應用程序在字體中選擇特定字形的確切過程是什麼?大部分應用都有首選字體。我們說這是Courier。 (並且在罕見的Unicode字符的情況下會發生什麼,比如心臟♥(U + 2665),這不是默認字體?應用程序如何知道字體不包含該字符?)

字體包含它有什麼符號的元信息?

如果2個字體都具有符號alpha,他們是否必須共享相同的「代碼點」?還是取決於字體的類型,如Type1,Type3,TrueType,OpenType? ...

感謝任何指針或引用。

回答

28

TrueType字體由多個部分組成,對於此問題最重要的是一個「字形」表和一個表(「cmap」),用於將字符映射到這些字形。

長話短說,操作系統使用「cmap」表將字符轉換爲字形索引,用缺省字形替換任何沒有匹配條目的字形。不幸的是,字體文件規範有多種版本(更不用說不同類型的字體)以及這些表中相同映射的不同字符編碼,因此實際執行映射的過程是有效的,因此文本繪製速度很快,最終變得非常複雜。

「代碼點」完全獨立於字符,編碼和字體。一個特定的代碼點是通用的,但它有很多編碼(UTF-8,UTF-16等),它將映射到不同字體的不同字形索引。

蘋果的開發者文檔,對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

我也推薦一個名爲的應用程序,它爲您提供了許多有關字體的有趣信息。具體查看Tools/Unicode Summary,字體/字體分析實用程序和字體/字體信息,您可以在其中將整個字形映射表提取到剪貼板。

+0

謝謝。好答案! – SeniorLee 2014-07-02 00:55:26

+0

是針對給定語言中的字符標準化的代碼點嗎?就像在X國做一些委員會聚會並決定,讓我們使用代碼點a,b,c,d ...爲我們的角色提供東西東西......?然後將其提交給一些ISO? – 2016-04-27 10:14:47

+0

@ v.oddou是的,確切地說,http://unicode.org是委員會,你可以看到不同語言的各種字符集的佈局方式:https://en.wikipedia.org/wiki/ Plane_%28Unicode%29和這裏的ISO關係:https://en.wikipedia.org/wiki/Universal_Coded_Character_Set – 2016-04-30 00:45:52