首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么ICU4J不匹配UTF-8排序顺序?

为什么ICU4J不匹配UTF-8排序顺序?
EN

Stack Overflow用户
提问于 2015-09-21 21:59:37
回答 2查看 189关注 0票数 0

我很难理解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的值

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-09-22 05:57:27

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

现在,链接到的页面以数字代码点的顺序显示所有内容。如果使用二进制排序规则(在Server中,这是以_BIN_BIN2结尾的排序规则),则按顺序排序。但非二元排序要复杂得多。规则在这里描述:Unicode排序算法(UCA)

基本规则在这里找到:CLDR.txt

它显示:

代码语言:javascript
复制
005F  ; [*010A.0020.0002] # LOW LINE
...
0023  ; [*0290.0020.0002] # NUMBER SIGN

记住,任何地区/文化都可以覆盖这些基本规则,这一点非常重要。因此,虽然上面提到的几行代码解释了这种特定情况,但其他情况下需要检查http://www.unicode.org/repos/cldr/tags/release-28/common/collation/,以确定是否存在特定于地区的重写。

票数 0
EN

Stack Overflow用户

发布于 2015-09-21 23:53:45

将马克·兰瑟姆的评论转化为一个答案:

  • 单个字符的排序是基于排序表的,而排序表与码点数的关系不大。请参阅:表格
  • 如果您遵循页面上的第一个链接,它将导致allkeys.txt,它给出了默认的排序规则顺序。
  • 特别是,_005F ; [*020B.0020.0002] # LOW LINE,而#0023 ; [*0391.0020.0002] # NUMBER SIGN。请注意,_的排序规则数字低于#的排序规则编号。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32705178

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档