2

有些字符不包含在 Unicode 中(即重音西里尔字母),但可以使用组合序列创建。据我了解,可能的组合字符序列是在布局引擎和/或使用的字体中定义的。我对吗?那么,如何获得所有可能的组合序列呢?

4

3 回答 3

5

您是正确的,因为布局引擎和字体的组合尝试创建任意组合序列可能会失败。此问题的解决方案超出了 Unicode 标准的范围。

Unicode 6.2第 2章:

所有组合字符都可以应用于任何基本字符,并且原则上可以与任何脚本一起使用。与其他字符一样,将组合字符分配给一个或另一个块仅标识其主要用途;它并不打算定义或限制它可能适用的字符范围。在 Unicode 标准中,所有字符代码序列都是允许的。

这并不要求实现同样好地支持所有可能的组合。因此,虽然允许将阿拉伯注释标记应用于汉字符或天城文辅音,但在渲染中不太可能得到很好的支持或没有多大意义。

于 2013-01-21T14:35:35.093 回答
1

这取决于您的特定布局引擎,是否以及如何查询某个 Unicode 字符序列是否可显示。

于 2013-01-21T14:43:38.917 回答
1

Unicode 中可能的组合字符序列集实际上是无限的(尽管只是可枚举的无限),因为组合字符可能出现在任何字符之后,包括组合字符。有时你会看到人们在 StackOverflow 中玩这个,使用一个字符,后面是一长串组合字符。

所以这个列表将是无限的。它可以自动生成,但用处不大。

重音西里尔字符包含在 Unicode 中,而不是预先组合的字符。在 Unicode 中,重音西里尔字符只是两个连续的 Unicode 代码点。

呈现的质量取决于所使用的字体和渲染引擎。通常,新软件可以很好地处理像 я́(西里尔字母 ya 和锐音)这样的简单情况,但旧软件可能具有简单的渲染例程,有时会错位变音符号。质量渲染要求软件访问有关基本字符尺寸的信息并相应地放置变音符号。

重要的是,变音符号取自与基本字符相同的字体。“跨字体”组合往往会产生糟糕或糟糕的结果。所以你应该首先检查哪些字体包含组合锐角U+0301,然后在剩余的候选字体中选择字体。

Unicode 有“<a href="http://www.unicode.org/reports/tr34/" rel="nofollow">命名字符序列”的概念。通俗地说,当组合不作为预先组合的字符存在时,它可以用来给一个序列(如字母后跟组合标记)赋予一些身份和“特征”。给出的动机是:“这种 Unicode 代码点序列的通用符号通常在话语文本中很有用。更正式地说,其他标准可能需要引用 Unicode 中由字符序列表示的实体。映射表可能会将其他标准中的单个字符映射到 Unicode 字符序列,并且字体或键盘的曲目覆盖列表可能需要引用不对应于单个 Unicode 代码点的实体。” 然而,注册表不包含任何以西里尔字符为碱基的序列。

于 2013-01-22T08:37:24.463 回答