Unicode 为什么';ICU4J是否匹配UTF-8排序顺序?
我很难理解unicode排序顺序 当我运行ICU4J 55.1下的Unicode 为什么';ICU4J是否匹配UTF-8排序顺序?,unicode,utf-8,icu4j,Unicode,Utf 8,Icu4j,我很难理解unicode排序顺序 当我运行ICU4J 55.1下的Collator.getInstance(Locale.ENGLISH).compare(““,“#”)时,我得到一个-1的返回值,指示位于之前 然而,我看到#(U+0023)在(U+005F)之前。为什么ICU4J返回值-1?将Mark Ransom的评论转换为答案: 单个字符的排序基于排序表,排序表与代码点编号几乎没有关系。见: 如果您遵循该页面上的第一个链接,它将导致默认排序规则顺序 特别地,\uuu是005F;[*020
Collator.getInstance(Locale.ENGLISH).compare(““,“#”)
时,我得到一个-1
的返回值,指示
位于
之前
然而,我看到
#
(U+0023)在
(U+005F)之前。为什么ICU4J返回值-1
?将Mark Ransom的评论转换为答案:
- 单个字符的排序基于排序表,排序表与代码点编号几乎没有关系。见:
- 如果您遵循该页面上的第一个链接,它将导致默认排序规则顺序
- 特别地,
是\uuu
而005F;[*020.0020.0002]#低端
是#
。请注意,0023;[*0391.0020.0002]#数字符号
的排序规则编号低于
的编号
\u-BIN
和\u-BIN2
结尾)进行排序的顺序。但非二进制排序要复杂得多。此处描述了这些规则:
基本规则如下所示:
它表明:
005F;[*010A.0020.0002]#低端
...
0023 ; [*0290.0020.0002]#数字符号
请记住,任何地区/文化都可以覆盖这些基本规则,这一点非常重要。因此,虽然上面提到的几行解释了这种特定情况,但其他情况需要检查是否存在任何特定于语言环境的覆盖。单个字符的顺序基于排序表,它与代码点编号几乎没有关系。开始请参阅。@markransem在哪里可以找到美国英语的排序表?unicode规范非常繁重,我找不到它的引用。如果您遵循该页面中的第一个链接,它将导致
allkeys.txt
,这将给出默认的排序规则顺序<代码>是005F;[*020.0020.0002]#低端
而#
是0023;[*0391.0020.0002]#数字符号
。请注意,\
的数字低于\
@MarkRansom的数字。我相信这回答了我的问题。请发布一个正式的答案,我会标记为接受马克赎金接近,但不是100%。我将在30-45分钟后发布答案。。。