有些字符不包含在Unicode中(即重音的西里尔字母),但可以使用组合序列创建。据我所知,可能的组合字符序列是在布局引擎和/或使用的字体中定义的。我对吗?那么,如何获得所有可能的组合序列?
答案 0 :(得分:5)
你是正确的,因为对于布局引擎和字体的组合,尝试创建任意组合序列可能会失败。这个问题的解决方案超出了Unicode标准的范围。
所有组合字符都可以应用于任何基本字符,原则上可以与任何脚本一起使用。与其他字符一样,将组合字符分配给一个块或另一个块仅标识其主要用法;它无意定义或限制可应用的字符范围。 在Unicode标准中,允许使用所有字符代码序列。
这并不会对实现产生同等支持所有可能组合的义务。因此,虽然允许将阿拉伯语注释标记应用于汉字或梵文辅音,但它不太可能在渲染或支持方面得到很好的支持。
答案 1 :(得分:1)
这取决于您的特定布局引擎,是否以及如何查询某个Unicode字符序列是否可显示。
答案 2 :(得分:1)
Unicode中可能的组合字符序列的集合实际上是无限的(尽管只有无数个),因为组合字符可能出现在任何字符之后,包括组合字符。有时候你会看到人们在StackOverflow中使用它,使用一个带有长串组合字符的字符。
所以列表将是无限的。它可以自动生成,但没有多大用处。
Accented Cyrillic字符包含在Unicode中,而不是预先组合的字符。在Unicode中,重音的西里尔字符连续只是两个Unicode代码点。
演示质量取决于所使用的字体和渲染引擎。通常情况下,新软件可以很好地处理简单的案例,例如я(西里尔语字母ya),但是旧软件可能有简单的渲染例程,有时会错误地使用变音符号。质量渲染要求软件访问有关基本字符尺寸的信息,并相应地放置变音符号。
重要的是,变音符号取自与基本字符相同的字体。 “交叉字体”组合往往会产生糟糕或糟糕的结果。因此,您应首先检查哪些字体包含组合急性U + 0301,然后在剩余的候选者中选择字体。
Unicode具有“named character sequence”的概念。从非正式的角度来说,当组合不作为预组合字符存在时,它可用于给字母之类的序列提供一些身份和“特征”,然后组合标记。给出的动机是:“Unicode代码点序列的这种通用符号在话语文本中通常很有用。更正式地说,其他标准可能需要引用通过字符序列以Unicode表示的实体。映射表可以将其他标准中的单个字符映射到Unicode字符序列,并且字体或键盘的曲目覆盖列表可能需要引用与单个Unicode代码点不对应的实体。“但是,这个概念并没有变得非常流行,并且当前registry不包含任何以西里尔字符为基础的序列。