unicode排序背后的理论是什么? 我理解它是如何工作的,但我不明白为什么they决定使用这个标准进行整理排序。
似乎当你有两个字符串要比较时,使用ucol_strcolliter()例如:
ucol_strcollIter(collator, &stringIter1, &stringIter2, &Status)
然后,说我的两个字符串是:
string string1 = "hello"
string string2 = "héllo"
在“辅助”归类强度下,string1应在string2之前排序。其中string1和string2的次要强度进行比较。
<1 hello
<2 héllo
BUT
如果您有尾随空格,例如:
string string1 = "hello "
string string2 = "héllo "
然后重音的hello(string2)将放在string1之前。并且,两者都按其主要重量进行比较。
<1 héllo
<1 hello
为什么 unicode整理算法会考虑尾随空格吗?
这背后有原因吗?
答案 0 :(得分:1)
这是一个古老的问题,但以后我会为其他人回答。
最初的“他们”是国际标准化组织,该组织发布了ISO-14651,ISO-14651是一种以任何编码方案整理文本的标准,但其目的是支持Unicode。该标准在很大程度上与实现无关。
然后,Unicode联合会发布了Unicode排序算法,该算法与ISO-14651兼容,但在实现细节方面要走得多。
排序规则取决于语言排序规则,并且排序规则类通常将语言环境作为参数。如前所述,默认排序顺序在DUCET中定义。如果您使用ICU4J库,它将与DUCET同步。
比较算法基于至少三个级别,以符合ISO-14651。级别定义如下。
大多数字符在比较前已标准化。因此,将重音符号“á”归一化为“ a”以进行1级比较。 Level-2用作决胜局。
存在默认规则是有原因的,但是可以针对个别用例进行定制。请注意,语言的排序方式不同,排序顺序通常与Unicode中字符出现的顺序不匹配。语言排序顺序不等于二进制排序顺序。
有关详细说明,请参见Unicode Collation Algorithm。
答案 1 :(得分:0)
因为空格字符的主要归类权重为0x0209。 (参考Default Unicode Collation Element Table,搜索# SPACE
)
空格,是否有尾随,是字符串的一部分。
答案 2 :(得分:0)
最好的TP可能是this。
您可以尝试使用ICU Collation Demo的各种选项组合。 (给“替代=转移”尝试)