我们知道代码点65
代表A
。有一对一的映射,因此很容易渲染。从字体文件中取符号A并渲染它。
65 == A
现在让我们考虑一下印地语。代码点0x0924
代表त
,再次易于映射。
0x0924 == त
但是,如果代码点0x0924
后面紧跟着分别代表0x094d
和0x0930
的代码点्
和र
,则表示不是组合这3个中有一个新符号त्र
0x0924 0x094d 0x0930 != त ् र
但是
0x0924 0x094d 0x0930 == त्र
我的问题是。
答案 0 :(得分:7)
欢迎使用现代字体:它们不是您的想法。 “一个代码点映射到一个字母”的日子是20年前的样子,现代字体在过去的几十年里一直在做更多的事情。我将用OpenType字体解释这个问题(大多数人称之为“ttf”和“otf”字体。是的,它们都是OpenType字体),因为这是你最有可能使用的那种,在这种情况下:字体几乎控制所有内容,而您所依赖的文本引擎只是遵循其指示。
OpenType字体有"Character Map",它提供(所有)从输入字节代码到可用字形列表中某处的某些字形(“形状”)的简单一对一映射。
并且它们可以有多个映射,因为ASCII中的代码与某些Windows代码页中的代码,或Mac语言/编码对或Unicode(仅覆盖前127个字符的ASCII,甚至是然后相当)。
然而,将二进制代码映射到其他二进制代码非常简单。现代字体的真正力量,特别是OpenType,就是接下来发生的事情。
制作好的字体,甚至只是对它们进行编程(因此根本不考虑字体设计)是一项非常专业的工作。