我在Redhat Linux 9.0下做了一个程序测试了一下:
Redhat Linux 9.0 JDK 1.4.1_02
使用compareTo方法比较,结果是"路上">"座位",因为
"路"的内码是0x8def,"座"的内码是0x5ea7.所以"路">"座",compareTo返回值是0x2f48
源码:
public class StringComparer {
    public static void main(String[] args) throws Exception {
        String a = "路上";
        String b = "座位";        char[] as = storeToCharList(a);
        System.out.println(a+"'s first: "+Integer.toHexString((int)as[0]));
        char[] bs = storeToCharList(b);
        System.out.println(b+"'s first: "+Integer.toHexString((int)bs[0]));        System.out.println("Compare result = "+Integer.toHexString(a.compareTo(b)));
    }    private static char[] storeToCharList(String str) {
        char[] cs = new char[str.length()];
        for ( int i=0; i<str.length(); i++ ) {cs[i]=str.charAt(i);}
        return cs;
    }
}
运行结果:
路上's first: 8def
座位's first: 5ea7
Compare result = 2f48

解决方案 »

  1.   

    用String的方法 :
      System.out.println("compare ===== " + "路上".compareTo(“座位”)
     compare ===== 12104(即0x2f48)  大于0 .........
      

  2.   

    准确的说, "路"的Unicode码是0x8def,"座"的Unicode码是0x5ea7
      

  3.   

    区位码是按拼音排序的,unicode按什么?
      

  4.   

    同意 lotofu(骆驼) 
    说的具体的看一下 java的输入输出
    部分
      

  5.   

    偶就是不明白,如果把字符串转换成字节流,然后从字节流里面读取出来的数据,跟gbk的编码表的数据一样,当时只要是把字节流变换成字符串,或者说字符,编码就变了!我认为,任何一种编码,最后都要体现到字库上,也就是说一定要映射到操作系统的字符库上对于中文的windows系统来说,就是gbk,所以说,不管是unicode,还是utf-8,都能够正确的变换到gbk的,但是现在的问题,确实不能,变幻玩了,就不对了!而且我这里距离的字,都是一级字,就是gb2313的字!
      

  6.   

    谢谢各位的帮忙,通过查看String类的代码,欧找了方法,还算凑合着能用了!