有关 unicode 代码点排序的基本原理的信息?
Information on rationale for unicode codepoint sorting?
我正在研究 https://github.com/JuliaLang/utf8proc/blob/master/utf8proc.c#L397,尤其是这个片段:
if (property1->combining_class > property2->combining_class &&
property2->combining_class > 0) {
buffer[pos] = uc2;
buffer[pos+1] = uc1;
显然,有一些 "sorting" 正在进行,但我无法在 Unicode 站点上找到这种排序的基本原理(我只是不知道如何搜索它)。
为什么某些属性先于其他属性,或者只是一个 "canonical" 顺序,是否有一些理由?
这是“规范排序算法”,它为字符后的组合标记定义了单一顺序。问题是在不同位置(例如,字符的上方和下方)具有多个组合标记的字符可以通过多种方式指定:
ṩ: U+0073
U+0323
U+0307
ṩ: U+0073
U+0307
U+0323
规范化文本时,规范排序算法确保 ṩ 只能出现在第一个顺序中:下面的点在上面的点之前。由于字符可以组合的方式多种多样,所以这种特定顺序(在上面之前之前)的原因有点随意,但它遵循 the order in this table——这似乎通常是从下到上,从左到-对。
算法的完整规范在 Unicode 标准的 section 3.11 中给出。
我正在研究 https://github.com/JuliaLang/utf8proc/blob/master/utf8proc.c#L397,尤其是这个片段:
if (property1->combining_class > property2->combining_class &&
property2->combining_class > 0) {
buffer[pos] = uc2;
buffer[pos+1] = uc1;
显然,有一些 "sorting" 正在进行,但我无法在 Unicode 站点上找到这种排序的基本原理(我只是不知道如何搜索它)。
为什么某些属性先于其他属性,或者只是一个 "canonical" 顺序,是否有一些理由?
这是“规范排序算法”,它为字符后的组合标记定义了单一顺序。问题是在不同位置(例如,字符的上方和下方)具有多个组合标记的字符可以通过多种方式指定:
ṩ:
U+0073
U+0323
U+0307
ṩ:
U+0073
U+0307
U+0323
规范化文本时,规范排序算法确保 ṩ 只能出现在第一个顺序中:下面的点在上面的点之前。由于字符可以组合的方式多种多样,所以这种特定顺序(在上面之前之前)的原因有点随意,但它遵循 the order in this table——这似乎通常是从下到上,从左到-对。
算法的完整规范在 Unicode 标准的 section 3.11 中给出。