我很难理解unicode排序顺序。
在Collator.getInstance(Locale.ENGLISH).compare("_", "#") 55.1下运行ICU4J时,会得到-1的返回值,指示_位于#之前。
然而,看看http://www.utf8-chartable.de/unicode-utf8-table.pl?utf8=dec,我发现# (U+0023)先于_ (U+005F)。为什么ICU4J要返回-1的值
发布于 2015-09-22 05:57:27
首先,UTF-8只是一种编码.它指定如何物理地存储Unicode代码点,但不处理排序、比较等。
现在,链接到的页面以数字代码点的顺序显示所有内容。如果使用二进制排序规则(在Server中,这是以_BIN和_BIN2结尾的排序规则),则按顺序排序。但非二元排序要复杂得多。规则在这里描述:Unicode排序算法(UCA)。
基本规则在这里找到:CLDR.txt
它显示:
005F ; [*010A.0020.0002] # LOW LINE
...
0023 ; [*0290.0020.0002] # NUMBER SIGN记住,任何地区/文化都可以覆盖这些基本规则,这一点非常重要。因此,虽然上面提到的几行代码解释了这种特定情况,但其他情况下需要检查http://www.unicode.org/repos/cldr/tags/release-28/common/collation/,以确定是否存在特定于地区的重写。
发布于 2015-09-21 23:53:45
将马克·兰瑟姆的评论转化为一个答案:
_是005F ; [*020B.0020.0002] # LOW LINE,而#是0023 ; [*0391.0020.0002] # NUMBER SIGN。请注意,_的排序规则数字低于#的排序规则编号。https://stackoverflow.com/questions/32705178
复制相似问题