3

考虑下图中的字母。

第一行显示字母本身,第二行对其进行编号,第三行显示其编码为三个十六进制 UFT-8 字节的 unicode 代码点。例如,字母 2 是 DEVANAGARI LETTER MA,代码点0x92E (= 2350 decimal)为 ,编码为三个十六进制 UTF-8 字节:e0, a4, ae

我的问题是关于特定连接字母的呈现,例如(1)。渲染系统如何处理这个渲染?我们通常输入这个连接字母的方式是首先输入字母 2,然后输入字母 4(表明我们打算将这个字母与下一个字母连接起来),然后输入字母 3。然后,渲染系统通过擦除垂直线来尊重连接动作在字母 2 中并在此处覆盖字母 4。我不清楚完整字母 2 及其垂直线擦除一半的字体(显示为淡红色椭圆形)在所选字体中是否可用

有人可以解释这是如何工作的吗?

在此处输入图像描述

4

2 回答 2

1

阅读Unicode® Standard Annex #15 - UNICODE NORMALIZATION FORMS中的分解和规范化;例如,在[Unicode] - The Unicode Standard的第 2 章,通用结构和第 3 章,一致性中更详细地解释了规范和兼容性等价:

字体及其相关的渲染过程定义了从 Unicode 字符到字形的任意映射。字体中的某些字形可能是单个字符的独立形式;其他人可能正在呈现不直接对应于任何单个字符的表单。

文本渲染要求将内存中的字符映射到字形。渲染文本的最终外观可能取决于上下文(内存表示中的相邻字符)、所用字体的排版设计变化以及格式信息(磅值、上标、下标等)。屏幕或纸上的结果可能与字母或字符的原型形状有很大不同,如图 2-3 所示。

图 2-3

对于拉丁文来说,字符码序列和字形的这种关系比较简单,众所周知;对于其他几个脚本,它记录在本标准中。然而,在所有情况下,精美的排版需要一套比这里给出的更精细的规则。Unicode 标准记录了字符序列和字形外观之间的默认关系,以确保相同的文本内容可以使用相同的、因此可互换的字符代码序列进行存储。

于 2017-01-17T15:26:29.630 回答
1

字体文件不仅仅是每个字母的一堆形状。它们包含指示字形如何表现的各种表格。

有:

  • 用于定位字形的表
  • 用于替换字形的表
  • 用于对字形进行分类和提供连字插入符表的表
  • 基线放置表
  • ...

另见:https ://fontforge.github.io/gposgsub.html

需要哪些字体功能取决于书写系统(拉丁文、西里尔文、阿拉伯文、梵文)以及它们的字形应该如何表现。使用什么表取决于字体设计者和字体文件类型(设计什么以及可以存储什么)。显示的功能取决于字体渲染器(有时渲染器会忽略字体指令)。

回到你的问题。这是一个替代品。究竟发生了什么由字体文件本身的表格中的信息描述。如果您真的想知道会发生什么,您必须在编辑器中打开字体并检查各种表格。我建议使用 FontForge(免费且免费)。

这个故事的寓意是字体文件不仅是美观的字母形状,而且是软件。

于 2017-01-17T08:21:22.817 回答