汉子排序的一个奇怪问题,求java高人进来解答!

[code="java"]
System.out.println(Collator.getInstance(Locale.CHINA).compare("张大","张月"));
System.out.println(Collator.getInstance(Locale.CHINA).compare("张楠","张月"));
[/code]

打印结果如下:
-1
1

大是d开头,月是y开头,排序正确
楠是n开头,月是y开头,排序错误???怎么回事

首先,得懂得汉字字符的比较规则,是按拼音来的不假。但是,根本原因是因为编码表是按照拼音来的。以GB2312编码为例:

大码值 B4F3

楠码值 E9AA

月码值 D4C0

汉字不是按你想想的a-z排序的,可能是按Unicode或是别的什么吧,具体如何排的我也不太清楚,你可以查找一下资料。呵呵

首先,得懂得汉字字符的比较规则,是按拼音来的不假。但是,根本原因是因为编码表是按照拼音来的。以GB2312编码为例:

大码值 B4F3

楠码值 E9AA

月码值 D4C2

汉字中存在着许许多多的多音字情况,所以,按照拼音来排序,只是个相对的,并非一定是这样的。要较真的话,必须查看汉字在相应的编码集中码值。

Unicode 也是这个顺序:

大码值 5927

月码值 6708

楠码值 6960

所以,你得到如上的结果一点疑问也没有