“字形”和“字符”之间的实际区别是什么?


26

在“版式”网站的建议中看到了这个问题,这使我感到困惑,因为我不知道答案。我一直认为“字形”和“字符”是可互换的。


阅读Unicode字符编码模型页面上的说明后,我的理解大致是这样的:

  • 字符是根据其在语言,字形,其外观中含义来定义的。因此,用于美学组合的连字 是一个字形,但是是两个字符。fi

因此,我的信念是(如果我错了,请纠正我)实际的区别是:

  • 对文本的美学不感兴趣的文本解析器将读取字形作为其各自的字符。所以:
    • 如果要将包含字形的文本复制并粘贴到纯文本编辑器中,则该字形将转换为它们各自的字符( 连字字形将变为fi
    • 任何基于文本解析的精良自动化系统(例如搜索引擎搜寻器,屏幕阅读器,拼写检查器)都可以将字形解释为它们各自的字符。
    • 一个字符可以具有许多字形或字形集。我想说一个字形只能有一个字符,但这显然是不对的,因为在链接的文章中有一个示例,其中包含3个字形和字形集,每个字形集似乎都对应一个字符和一组字符。我不太清楚这是如何工作的:肯定的是,这意味着这些字形在解释方式上会不一致或含糊,因翻译而异?(或者它是否因语言或字体而有所不同?)
    • 尽管字形浏览器(例如Illustrator中的字形浏览器)包含字体的完整字形集,但是字符图(例如Windows字符图)仅包含字符,而不包含像连字一样由多个字符组成的字形(我以前从未注意到过)

我觉得我几乎有,但我已经沿线显然误解了一些地方:不只是“一字形多个字符”的事情,而且还复制与粘贴绷带行为不是我所期待的:

  • 将连字从Illustrator 复制到此输入框:fi按预期粘贴为(两个字符)。
  • 为其粘贴HTML代码(fi)-不在代码块中时显示为连字(图-该字体看起来不太像连字,但是如果您尝试只选择一半,则会看到一个连字。 ),以及位于代码块(fi)中的代码(按预期)。
  • 将渲染的非代码块连字复制并粘贴回输入框中:粘贴为连字字符,然后渲染为连字,而不管它是否在代码块中(?和)。同样,包含它的单词:匹配错误fit misfits)粘贴为匹配错误fit misfits)。也许取决于粘贴的位置是否理解所使用的编码?

我对此的理解有多错误?有人可以对我说对吗:对字形和字符之间的区别进行清晰的定义(如果我的错误或可以改进),并给出比我更清楚/更准确的示例,说明实际含义是什么?


2
当您使用阿拉伯语等脚本并组合了多个字符时,情况将变得更加复杂。
恢复莫妮卡-M.Schröder'12

1
@MartinSchröder+1听起来像一个很好的答案的开头句子... :)
user56reinstatemonica8

Answers:


4

字形与文本的呈现方式有关,字符与文本的解释方式有关。复制和粘贴时,源应用程序通常会提供几种格式的选择。纯文本会将字词分解为f和i,HTML格式可能会将其转换为您引用的char实体,也可能将其分解为f和i。

通常,字符和字形之间的关系为n:m。在印度语言中,某些字符分为两个字形,它们位于单词的不同位置。在拉丁语中,最接近这种情况的情况是将é渲染为两个字形(e和´)。在阿拉伯语中,每个字符都有不同的字形,具体取决于其在单词中的位置:首字母,中间字母,最后字母或孤立字母。

从字符到字形的转换特定于每个应用程序及其支持的印刷功能。对于拉丁文字,此翻译以前很简单,但是OpenType字体引入了附加功能,例如连字,斜体,替代形式,小写字母等。

出于实际原因,您仅在实现应用程序呈现文本的方式,设计字体时或要应用将某些字形替换为其他字形(例如连字)的OpenType功能时,才使用字形。否则,Unicode代码点就是您的朋友。


尊敬的user322483,欢迎您访问GDSE,并感谢您的答复。如果您有任何疑问,请在信誉良好后访问帮助中心,或在Graphic Design Chat中 ping我们之一(20)。继续贡献并享受该网站!
文森特

1
您写道:“在阿拉伯语中,每个字符都有不同的字形,具体取决于其在单词中的位置:首字母,中间字母,最终字母或孤立字母。” <---它们不是不同的字符吗?英语中有A和a,但是在计算机语言中,A和a是不同的字符。每个字形都映射到不同的代码。希伯来语有chaf和final chaf(单词末尾的字母chaf,看起来有所不同),我敢肯定它在计算中被称为不同的字符。
barlop

14

我不认为您的理解是错误的,只是您看到的系统试图通过粘贴用户想要的内容来帮助用户。由于某些连字(“ fi”,“ fl”)在排版系统之外相当普遍,因此软件可以识别出用户可能没有输入该字形,而是由另一个应用程序转换了其键入的字符。

简而言之:字符是指语言单元。字形是指该单元的设计实例,无论是大写,小写,小写,历史或风格变体。


在计算中,A和a是不同的字符。ASCII有128个字符,其中的术语字符包括A和a作为不同的字符。
barlop

工程师使用的许多词语与其他行业的先例不符。您的一个很好的例子。
便衣

谁首先想到了“字符”和“字形”一词?图形设计师还是计算机工程师?我本以为计算机早于图形设计。但是,可能有印刷业以某种方式优先于图形设计和可争议的优先于计算机,或者比现代计算机早。我想虽然对于现在的图形设计最能回答问题的人是印刷业,但是没有印刷业stackexchange。但是,知道谁从谁那里借钱以及以什么方式重新称呼字符将很有趣。
barlop 2015年

1
排版于软件工程。如果您进行研究并找到来源,请在此处张贴。我的猜测是它将在17世纪的某个时候。最早可能是16世纪中期的第一位印刷者。
2015年

6

这里有几个答案可以很好地说明字形与字符,但它们并不能真正解决您在复制和粘贴方面的困惑。

首先,您的理解从根本上是正确的:

字符是根据其在语言,字形,其 外观中含义来定义的。因此,从美学角度组合fi的连字是一个字形,但是两个字符。

值得强调的是,字符列表是由Unicode联盟(Unicode Consortium)发布的Unicode标准定义的,因为它们是对以机器可读格式编码文本的权限。上面的定义本质上是Unicode联盟成员用来确定提议的Unicode附加内容是字符(因此值得包含)还是字形并应由字体渲染器处理的主要准则。

我之所以这样说是因为您在上面遇到的困惑是由于Unicode中存在多个连字字符(不是字形)。例如,U+FB01连字的字符是:http : //unicode.org/charts/PDF/UFB00.pdf

Unicode中没有连字字符并没有真正符合上述定义的实质,因为在Unicode标准中应包含哪些类型的字符作为字符,因为连字实际上并没有独立于其他两个字符的含义。Unicode人们很自然地意识到这一点,而有关连字Unicode FAQ也承认:

现有的连字主要是为了与非Unicode字符集兼容和往返。不鼓励使用它们。

这个角色的存在最终是您困惑的根源。

在正确实现的软件中,复制文本应该始终复制指定的字符,而不是字形,而这正是您的三个示例中所发生的事情。

1)在第一个示例中,您键入fi输入Illustrator,从而绘制了单个连字字形。选择并复制该渲染字形后,Illustrator将fU+0066)和iU+0069)字符正确复制到了剪贴板上。

2)在第二个示例中,您在输入框中键入了连字字符&#64257)的HTML代码,并正确获取了表示连字字符的连字字形(。由于基本字符实际上是我提到的晦涩且相对没有意义的连字字符上方,选择该字形将复制一个字符。U+FB01

3)在第三个示例中,您要复制第2部分中渲染的渲染连字字符 U+FB01,该字符将始终粘贴为该字符。您的主要困惑似乎是关于HTML实体代码和字符之间的差异,尤其是关于它们在代码块之内和之外的呈现方式。

HTML实体代码&#64257;是8个不同字符的字符串。Web浏览器的HTML渲染器用单个 Unicode字符替换了这8个字符U+0026 U+0023 U+0036 U+0032 U+0035 U+0037 U+0023,然后将其适当地渲染。但是,HTML中的标记会禁用此行为,将这8个字符保留不变。U+FB01<code>

复制呈现的HTML时,将复制呈现的字符(与呈现的字形不同)。因此,当您复制呈现的HTML实体时,单个U+FB01字符将被复制到剪贴板。

当您将 U+FB01字符粘贴回HTML时,无需进行替换,这意味着该字符将显示为连字,无论它是否位于一个<code>块内。


1

字符是存储在文本文件中,由应用程序处理并四处移动的内容,而字形是其视觉表示。

为了获得清晰的图片,让我们看看当应用程序尝试在屏幕上渲染文本字符串时会发生什么(以一种简化的方式):

  • 应用程序首先读取文本字符串,该字符串是存储在磁盘或内存中的字符串。
  • 然后,它将把它发送到文本布局引擎以及其他一些属性,例如所需的字体,文本语言等:
    • 文本布局引擎基本上打开字体文件,要求它为对应于每个字符的字形(多个),并做一些符号替换(如更换为字形fi与连字字形的fi)和定位(例如字距调整)。
    • 最后,布局引擎具有一系列字形,它们之间的相对位置以及输入字符和输出字形之间的映射。字符到字形的映射使得知道单词中的前两个字符file对应于第一个字形(fi连字),第三个字符到第二个字形以及第四个字符到第三个字形。
  • 然后使用图形渲染库使用字体中的形状在屏幕上“绘制”这些字形。
  • 当用户在屏幕上选择“字形”时,应用程序将查询字形到布局引擎提供的文本映射,以查找输入文本的哪一部分与用户选择的内容相对应,并在输入文本时将其发送到剪贴板。用户将其复制。
  • 当用户将光标插入文本的中间并开始输入,映射确定输入文本中要插入新字符的位置以及将更新的文本发送到布局引擎进行处理和重绘等操作时,也会发生同样的情况。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.