Unicode 中的“组合字符”</a> 和“字形扩展器”</a> 有什么区别?
据我所知,它们似乎在做同样的事情——尽管字素扩展器的集合大于组合字符的集合。我显然在这里遗漏了一些东西。为什么要区分?
Unicode 标准,第 3 章,D52
- 组合字符:具有组合标记(M)的一般类别的字符。
- 组合字符由具有间距组合标记 (Mc)、非间距标记 (Mn) 和封闭标记 (Me) 的常规类别值的所有字符组成。
- 所有具有非零规范组合类的字符都是组合字符,但情况并非如此:存在具有零规范组合类的组合字符。
- 私有字符 (Co) 是否解释为组合字符由实现决定。
- 这些字符通常不会单独使用,除非它们被描述。它们包括诸如口音、变音符号、希伯来语点、阿拉伯元音符号和印度语 matras 等字符。
- 组合字符的图形定位取决于最后一个前面的基本字符,除非它们被一个既不是组合字符也不是零宽度连接符或零宽度非连接符的字符分隔。据说组合字符适用于该基本字符。
- 可能没有这样的基本字符,例如当组合字符位于文本开头或跟随控制或格式字符时 - 例如,回车符、制表符或左右标记。在这种情况下,组合字符称为孤立组合字符。
- 有孤立的组合字符或当一个进程无法进行图形组合时,进程可能会呈现一个没有图形组合的组合字符;也就是说,它可以将其呈现为就好像它是一个基本字符一样。
- 组合字符的代表图像在代码图中用虚线圆圈表示。当与前面的基本字符以图形组合形式呈现时,该基本字符旨在出现在虚线圆圈所占据的位置。
Unicode 标准,第 3 章,D59
- Grapheme 扩展器:具有Grapheme_Extend属性的字符。
- 字形扩展字符由所有非间距标记、零宽度连接符、零宽度非连接符、U+FF9E、U+FF9F 和少量间距标记组成。
- 字素扩展器主要可以被认为是一种非间距图形标记,应用于另一个间距字符的上方或下方。零宽度连接器和零宽度非连接器被正式定义为字素扩展器,因此它们的存在不会破坏其他字素扩展器的序列。
- 少数具有 Grapheme_Extend 属性的间距标记都是双部分组合标记的第二部分。
- 根据定义,具有 Grapheme_Extend 属性的字符集和具有 Grapheme_Base 属性的字符集是不相交的。