string - unicode是什么 - 中文unicode编码表




字符,代码点,字形和字形之间有什么区别? (2)

在Unicode标准之外, 字符 是由一个或多个 字素 组成的 单个文本单元 。 Unicode标准定义为“字符”的实际上是字素和字符的混合。 Unicode提供了将并列的字素解释为单个字符的规则。

Unicode 代码点 是分配给每个 Unicode字符 (可以是字符或字形)的唯一数字。

不幸的是,Unicode规则允许将某些并置的字素解释为已经具有自己的代码点( 预组合形式 )的其他字素。 这意味着Unicode中有多种方式来表示字符。 Unicode规范化 解决了这个问题。

字形是字符的视觉表示。 字体为一组特定字符(不是Unicode字符)提供一组字形。 对于每个字符,都有无限数量的可能字形。

回复马克·阿默里

首先,正如我所说,每个字符都有无限多个可能的字形,所以不,一个字符不是“总是由单个字形表示”。 Unicode对字形的关注并不多,它在代码表中定义的内容当然也不是字形。 问题在于它们都不都是字符。 那是什么

哪个更大的实体,字素或字符? 人们如何称呼那些不是字母或标点符号的图形元素? 浮现在脑海中的一个词是“字素”。 这个词恰恰构想出“文本中的图形单元”的概念。 我提供以下定义:字素 是书面文本中最小的独特组成部分

有人可能会说另一种说法,即字素是由字符组成的,但后来它们被称为“中国字素”,而所有这些由中国字素组成的点点滴滴都必须称为“字符”。 但是,这全都是倒退。 字素是不同的小片段。 人物比较发达。 短语“字形是可组合的”在Unicode的上下文中会更好地表述为“字符是可组合的”。

Unicode定义了字符,但它也定义了要与其他字素或字符组成的字素。 您组成的那些怪兽就是一个很好的例子。 如果他们赶上了,也许他们会在更高版本的Unicode中获得自己的代码点;)

所有这些都有一个递归元素。 在更高的层次上,字素变成了字符,变成了字素,但是它一直都是字素。

对TS的回复

该标准的 第一章 指出:“ Unicode字符编码等效地对待字母,表意字符和符号,这意味着它们可以以任何混合物使用并且具有相同的功能”。 鉴于此陈述,我们应该为标准中的术语混用做好准备。 有时,随着标准的发展,适当的术语只会在回顾中变得清晰。

通常在一种语言的正式定义中,两个基本事物是相互定义的。 例如,在 XML ,元素被定义为开始标签,可能随后是内容,然后是结束标签。 内容又定义为元素,字符数据或其他一些可能的东西。 自我引用定义的模式在Unicode标准中也隐含:

字素是一个代码点或一个字符。

一个字符是由一个或多个字素的序列组成的。

当第一次遇到这两个定义时,读者可能会以代码点 字符为由而反对第一个定义,但这并不总是正确的。 两个代码点的序列有时会在 normalization 对单个代码点进行编码,并且该编码的代码点表示字符, 如图2.7所示 。 编码其他代码点的代码点序列。 这有点棘手,我们甚至还没有到达使用字符编码方案(例如 UTF-8 将代码点编码为字节序列的层次。

在某些情况下,例如有关 diacritics 的学术文章,人物的各个部分可能会单独出现在文本中。 在这种情况下,单个字符部分可以被视为一个字符,因此Unicode标准也应保持灵活性。

正如马克·艾弗里(Mark Avery)所指出的那样,角色可以组成更复杂的事物。 也就是说,如果需要,每个字符都可以用作字素。 所有构图的最终结果都是“用户认为是角色”。 无论是在标准中还是在本讨论中,似乎都没有任何真正的阻力可以阻止用户在最高层次上将这些东西看作是单个字符。 为避免重载该术语,在所有要引用组成字符的部分的情况下,我们都可以使用“字素”。

有时,Unicode标准及其术语无处不在。 例如, UTF-8 将UTF-8定义为“编码形式”,而词汇表将“编码形式”定义为其他形式,将UTF-8定义为“字符编码方案”。 另一个示例是“ Grapheme_Base”和“ Grapheme_Extend”,它们 被认为 是错误,但由于清除它们是一项艰巨的任务,因此仍然存在。 仍有工作要做以加强该标准使用的术语。

关于添加“ GRAPHHEME JOINER组合 ”的 提案 错误地指出,“字素是一个或多个编码字符的序列,与用户认为的字符相对应”。 它应改为:“一个或多个字素的序列构成了用户认为是字符的内容。” 然后,它可以与术语“字符序列”不同地使用术语“字素序列”。 这两个术语都是有用的。 “字形序列”巧妙地暗示了从较小的片段中构建角色的过程。 “字符序列”是指我们通常都直指的含义:“用户认为是字符的一系列事物。”

有时程序员确实确实希望在字素序列的级别上进行操作,因此应该可以使用检查和操纵这些序列的机制,但是通常,在处理文本时,对“字符序列”进行操作就足够了(用户认为作为字符),然后让系统管理较低级别的详细信息。

到目前为止,在本讨论中讨论的每种情况下,使用“字素”来指代不可分割的组件,而使用“字符”来指代组成的实体则更为简洁。 此用法还更好地反映了这两个术语的悠久含义。

试图了解现代Unicode的微妙之处使我很头疼。 特别是,代码点,字符,字形和字形之间的区别-在 最简单的 情况下,使用ASCII字符处理英文文本时,它们之间都是一对一的关系,这些概念给我带来了麻烦。

看到这些术语如何在诸如Matthias Bynens的 JavaScript之 类的文档 中使用unicode 或Wikipedia关于 汉统一的文章时 ,我收集到这些概念不是一回事,将它们混淆是很危险的,但是我有点努力掌握每个术语的 含义

Unicode联合会提供了一个 glossary 来解释这些内容,但是它充满了这样的“定义”:

抽象人物 。 信息单位,用于组织,控制或表示文本数据。 ...

...

性格 。 ...(2)抽象字符的同义词。 (3)Unicode字符编码的基本编码单位。 ...

...

字形 。 (1)代表一个或多个字形图像的抽象形式。 (2)字形图像的同义词。 在显示Unicode字符数据时,可以选择一个或多个字形来描绘特定字符。

...

字素 。 (1)在特定书写系统的上下文中最小的独特书写单元。 ...

这些定义中的大多数具有听起来很学术和形式化的质量,但是缺乏 任何含义 的质量,否则将定义问题推迟到标准的另一个词汇表条目或部分。

因此,我寻求那些比我更博学的人的奥秘智慧。这些概念中的每一个究竟有何不同?在什么情况下它们之间不会存在一对一的关系?


  • 字符 是一个重载的术语,其含义不胜枚举。

  • 代码点 是信息的原子单位。 文本 是代码点的序列。 每个代码点都是一个数字,该数字由Unicode标准指定。

  • 代码单位 是编码的代码点的 一部分 的存储单位。 在UTF-8中,这意味着8位,在UTF-16中,这意味着16位。 单个代码单元可以代表完整的代码点或部分代码点。 例如,雪人字形( )是单个代码点,但3个UTF-8代码单元和1个UTF-16代码单元。

  • 字素是一个或多个代码点的序列,显示为单个图形单元,读者可以将其识别为书写系统的单个元素。 例如, aä 都是字素,但它们可能包含多个代码点(例如 ä 可以是两个代码点,一个用于基字符 a 然后一个用于偏音;但是还有一种替代的,遗留的单个代码表示此字素的点)。 某些代码点绝不是任何字形的一部分(例如零宽度非连接符或方向替代)。

  • 字形 是通常以 字体 (字形的集合)存储的图像,用于表示字素或其部分。 字体可以将多个字形组合成一个单一的表示形式,例如,如果上述 ä 是单个代码点,则字体可以选择将其呈现为两个单独的空间重叠字形。 对于OTF,字体的GSUB和GPOS表包含替换和位置信息以使其起作用。 字体也可能包含同一字形的多个替代字形。





terminology