Unicode归类排序背后的理论是什么

问题描述 投票:2回答:3

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归类算法是否考虑尾随空格?

此背后是否有某些原因

icu uca
3个回答
0
投票

最好的TP可能是this

您可以使用ICU Collation Demo尝试各种选项组合。 (尝试“另选=转移”)


0
投票

因为空格字符的主要归类权重为0x0209。 (参考Default Unicode Collation Element Table,搜索# SPACE

空格,无论是否结尾,都是字符串的一部分。


0
投票

这是一个老问题,但以后我会为其他人回答。

最初的“他们”是国际标准化组织,他发布了ISO-14651,ISO-14651是一种以任何编码方案整理文本的标准,但其目的是支持Unicode。该标准在很大程度上与实现无关。

然后Unicode联合会发布了Unicode排序算法,该算法与ISO-14651兼容,但在实现细节方面更进一步。

排序规则取决于语言排序规则,排序规则类通常将语言环境作为参数。如前所述,默认排序顺序在DUCET中定义。如果您使用ICU4J库,它将与DUCET同步。

比较算法基于至少三个级别,以符合ISO-14651。级别定义如下。

  1. 基本字符(例如a,b,c,d)
  2. 口音
  3. 大小写/变体
  4. 标点符号

大多数字符在比较前已标准化。因此,将重音符号“á”归一化为“ a”以进行1级比较。 Level-2用作决胜局。

存在默认规则是有原因的,但是可以针对个别用例进行定制。请注意,语言的排序方式不同,排序顺序通常与Unicode中字符出现的顺序不匹配。语言排序顺序不等于二进制排序顺序。

请参阅Unicode Collation Algorithm以获取非常详细的说明。

© www.soinside.com 2019 - 2024. All rights reserved.