郁闷!汉字内码的问题!

zhang21cnboy 2003-07-11 02:45:19
偶碰到了很恶心的问题!

字符串大小的比较,根据java的文档介绍,两个字符比较的时候,是根据内码比较的,那么就是说 '路' 比 '座'小,是不是呢?

可是偶这么用的时候,简直把我折磨死了,'路' 比 '座'得编码大,我采用的是GBK编码,根据GBK编码表:‘路’的编码为:c2b7,‘座’是d7f9.,可是当我用java程序输出的时候,变成了:‘路’:8def,‘座’:5ea7!

这让我简直要发疯了,不管用什么编码,‘座’要比'路'大才可以啊!

这到底是怎么一回事呢?
...全文
75 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
DanielYWoo 2003-07-14
  • 打赏
  • 举报
回复
试试这个,我常用的
DanielYWoo 2003-07-14
  • 打赏
  • 举报
回复
package tests.tips;

import java.util.*;
import java.text.CollationKey;
import java.text.Collator;


public class ChineseSortSample
{

public ChineseSortSample()
{
}

public void normalSort(ArrayList arrayList)
{
Collections.sort(arrayList);
System.out.println("normal sort result:");
System.out.println(arrayList);
}

public void chineseSort(ArrayList arrayList)
{
ArrayList newArray = new ArrayList();
//liucheng, see this the following lines
Collator collator = Collator.getInstance(Locale.CHINA);
for (int i = 0; i < arrayList.size(); i++) {
CollationKey key = collator.getCollationKey( (String) arrayList.get(
i));
newArray.add(key);
}
Collections.sort(newArray);
System.out.println("chinese sort result:");
boolean first = true;
Iterator iterator = newArray.iterator();
System.out.print("[");
while (iterator.hasNext()) {
if (first) {
first = false;
} else {
System.out.print(", ");
}
CollationKey key = (CollationKey) iterator.next();
System.out.print(key.getSourceString());
}
System.out.println("]");
//end
}

public void show(ArrayList arrayList)
{
normalSort(arrayList);
chineseSort(arrayList);
}

public static void main(String[] args)
{
String testStr;
if (args.length > 0) {
testStr = args[0];
} else {
testStr = "\u8FD9\u662F\u4E00\u4E2A\u6D4B\u8BD5\u7A0B\u5E8F\uFF0C\u770B\u662F\u5426\u80FD\u591F\u6309\u7167\u4E2D\u6587\u62FC\u97F3\u7684\u82F1\u6587\u5B57\u6BCD\u6765\u6392\u5E8F";
}
ChineseSortSample chineseSortSample1 = new ChineseSortSample();

char[] charArray = testStr.toCharArray();
ArrayList arrayList = new ArrayList();
for (int i = 0; i < charArray.length; i++) {
arrayList.add(String.valueOf(charArray[i]));
}
chineseSortSample1.show(arrayList);
}
}
yefc 2003-07-12
  • 打赏
  • 举报
回复
去用java.text.Collator
honkyjiang 2003-07-11
  • 打赏
  • 举报
回复
public class encode {
public static void main(String[] args){
byte[] bys1 = "路".getBytes();
byte[] bys2 = "座".getBytes();

System.out.println("compare0 == " + ("路".compareTo("座"))); //12104
String str1=null,str2=null;
try{
str1 = new String(bys1,"utf8");
str2 = new String(bys2,"utf8");
System.out.println("compare1 == " + (str1.compareTo(str2)));//-65350
}catch(Exception e){

}
try{
str1 = new String(bys1,"UTF-16BE");
str2 = new String(bys2,"UTF-16BE");
System.out.println("compare2 == " + (str1.compareTo(str2))); //-5442
}catch(Exception e){
System.out.println(e);
}

try{
str1 = new String(bys1,"ISO-8859-1");
str2 = new String(bys2,"ISO-8859-1");
System.out.println("compare3 == " + (str1.compareTo(str2)));//-21
}catch(Exception e){

}

}
}
zhang21cnboy 2003-07-11
  • 打赏
  • 举报
回复
Unicode编码里面,没有拼音的顺序?

转换了,还是不行!
schwarzenegger 2003-07-11
  • 打赏
  • 举报
回复
JAVA内部是UNICODE编码,用String.getByte("编码")把字符串转换成指定编码
schwarzenegger 2003-07-11
  • 打赏
  • 举报
回复
java用unicode而不是gbk,转换成gbk再比较

62,615

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧