0

我很难理解 unicode 排序顺序。

当我Collator.getInstance(Locale.ENGLISH).compare("_", "#")在 ICU4J 55.1 下运行时,我得到一个返回值,-1表明它_#.

但是,查看http://www.utf8-chartable.de/unicode-utf8-table.pl?utf8=dec我看到#(U+0023) 在_(U+005F) 之前。为什么 ICU4J 返回值-1

4

2 回答 2

0

首先,UTF-8 只是一种编码。它指定如何物理存储 Unicode 代码点,但不处理排序、比较等。

现在,您链接到的页面以数字代码点顺序显示所有内容。如果使用二进制排序规则,这就是排序的顺序(在 SQL Server 中,这将是名称以_BINand结尾的排序规则_BIN2)。但是非二进制排序要复杂得多。此处描述了规则:Unicode 排序算法 (UCA)

基本规则可以在这里找到:http ://www.unicode.org/repos/cldr/tags/release-28/common/uca/allkeys_CLDR.txt

表明:

005F  ; [*010A.0020.0002] # LOW LINE
...
0023  ; [*0290.0020.0002] # NUMBER SIGN

请记住,任何语言环境/文化都可以覆盖这些基本规则,这一点非常重要。因此,虽然上面提到的几行解释了这种特定情况,但其他情况需要检查http://www.unicode.org/repos/cldr/tags/release-28/common/collat​​ion/以查看是否有任何语言环境- 特定的覆盖。

于 2015-09-22T05:57:27.127 回答
0

将 Mark Ransom 的评论转换为答案:

于 2015-09-21T23:53:45.157 回答