Unicode标准外的字符是一个文本的个别单元的一种或多种组成的字形。Unicode标准定义为“字符”的内容实际上是字素和字符的混合。Unicode提供了将并列的字素解释为单个字符的规则。
甲Unicode的 码点是分配给每个唯一的编号Unicode字符(其可以是一个字符或字形)。
不幸的是,Unicode规则允许将某些并置的字素解释为已经具有自己的代码点(预组合形式)的其他字素。这意味着Unicode中有多种方式来表示字符。Unicode规范化解决了这个问题。
字形是角色的视觉表示。字体为一组特定的字符(不是Unicode字符)提供一组字形。对于每个字符,都有无限多个可能的字形。
回复马克·阿默里
首先,正如我所说,每个字符都有无限多个可能的字形,因此不,一个字符不是“总是由单个字形表示”。Unicode对字形的关注并不多,它在代码表中定义的内容当然也不是字形。问题在于它们都不都是字符。那是什么
哪个更大的实体,字素或字符?人们怎么称呼那些不是字母或标点符号的图形元素?浮现在脑海中的一个名词是“字素”。这个词恰恰构想出“文本中的图形单元”的概念。我提供以下定义:字素是书面文本中最小的不同组成部分。
有人可能会说另一种说法,即字素是由字符组成的,但后来它们被称为“中国字素”,而所有由中国字素组成的点点滴滴都必须被称为“字符”。但是,这全都是倒退。字素是不同的小片段。人物比较发达。短语“字形是可组合的”在Unicode的上下文中会更好地表述为“字符可组合”。
Unicode定义了字符,但它也定义了要与其他字素或字符组成的字素。您组成的那些怪兽就是一个很好的例子。如果他们赶上了,也许他们会在更高版本的Unicode中获得自己的代码点;)
所有这些都有一个递归元素。在更高的层次上,字素变成了字符,变成了字素,但是它一直都是字素。
对TS的回复
该标准的第一章指出:“ Unicode字符编码等效地对待字母,表意字符和符号,这意味着它们可以以任何混合物使用并且具有相同的功能”。鉴于此陈述,我们应该为标准中的术语混用做好准备。有时,随着标准的发展,适当的术语只会在回顾中变得清晰。
通常在一种语言的正式定义中,两个基本事物是相互定义的。例如,在
XML中,一个元素被定义为一个开始标签,可能后面跟着内容,然后是结束标签。内容又定义为元素,字符数据或其他一些可能的东西。自我引用定义的模式也隐含在Unicode标准中:
字素是代码点或字符。
一个字符是由一个或多个字素的序列组成的。
当第一次遇到这两个定义时,读者可能会以代码点是字符为由而反对第一个定义,但这并不总是正确的。如图2.7所示,两个代码点的序列有时会在归一化的情况下对单个代码点进行
编码,并且该编码的代码点表示字符
。编码其他代码点的代码点序列。这变得有些棘手,我们甚至还没有到达使用字符编码方案(例如UTF-8)将代码点编码为字节序列的层次。
在某些情况下,例如有关变音符号的学术文章
和人物的各个部分可能会单独出现在文本中。在这种情况下,可以将单个字符部分视为一个字符,因此Unicode标准也应保持灵活性。
正如马克·艾弗里(Mark Avery)所指出的那样,角色可以组成更复杂的事物。也就是说,如果需要,每个字符都可以用作字素。所有构图的最终结果都是“用户认为是角色”。无论是在标准中还是在本讨论中,似乎都没有任何真正的阻力可以阻止用户在最高层次上将文本视为用户的单个字符。为避免重载该术语,在所有要引用组成字符的部分的情况下,我们都可以使用“字素”。
有时,Unicode标准及其术语无处不在。例如,第3章
将UTF-8定义为“编码形式”,而词汇表将“编码形式”定义为其他形式,将UTF-8定义为“字符编码方案”。另一个示例是“ Grapheme_Base”和“ Grapheme_Extend”,它们被认为是错误,但由于清除它们是一项繁重的工作,因此仍然存在。仍有工作要做以加强该标准所采用的术语。
关于添加“ GRAPHHEME JOINER组合 ”的提案错误地指出,“字素是一个或多个编码字符的序列,与用户认为的字符相对应”。它应改为:“一个或多个字素的序列构成了用户认为是字符的内容。” 然后,它可以与术语“字符序列”不同地使用术语“字素序列”。这两个术语都是有用的。“字素序列”巧妙地暗示了从较小的片段中构建角色的过程。“字符序列”是指我们通常都直指的含义:“一系列用户认为是字符的事物。”
有时程序员确实确实希望在字素序列的级别上进行操作,因此应该可以使用检查和操纵这些序列的机制,但是通常,在处理文本时,对“字符序列”进行操作就足够了(用户认为作为字符),然后让系统管理较低级别的详细信息。
到目前为止,在本讨论中讨论的所有情况下,使用“字素”来指代不可分割的组件,而使用“字符”来指代组成的实体则更为简洁。此用法还更好地反映了两个术语的长期含义。