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