public static String change(String str) {
        String outStr = "";
        String test = "";
        byte[] code = null;        for (int i = 0; i < str.length(); i++) {
            try {
                test = str.substring(i, i + 1);
                code = test.getBytes("unicode");
            } catch (Exception e) {
                e.printStackTrace();
            }
            if (code[3] != -1) {
                code[2] = (byte) (code[2] + 32);
                code[3] = 0;                try {
                    outStr = outStr + new String(code, "unicode");
                } catch (Exception e) {
                    return str;
                }
            } else {
                outStr = outStr + test;
            }
        }
        return outStr;
    }以上这段代码是网上的..谁能解释一下,test.getBytes("unicode")后得到的byte[]类型的code,每一个都代表什么意思??code[0]是什么意思?
code[1]什么意思?
code[2]什么意思?
code[3]什么意思?code[3] != -1   这又是什么意思???
code[2] = (byte) (code[2] + 32);这又是什么意思???

解决方案 »

  1.   

    应该是使用unicode字符集把String解码为字节序列的字节吧!
      

  2.   

    建议你参考文章:
    http://www.360doc.com/content/081015/09/61497_1765862.html.getBytes("unicode")这个unicode有统一编码,但是还有子集,在不同的平台下面是不同的.
     String temp = "a";        try {            byte[] unicodes = temp.getBytes("Unicode");            System.out.println("unicodes=" + unicodes.length);
                for (int i = 0; i < unicodes.length; i++) {
                    System.out.println(unicodes[i]);
                }            unicodes = temp.getBytes("UnicodeLittleUned");
                System.out.println("unicodes=" + unicodes.length);
                for (int i = 0; i < unicodes.length; i++) {
                    System.out.println(unicodes[i]);
                }
                
                unicodes = temp.getBytes("UnicodeBigUned");
                System.out.println("unicodes=" + unicodes.length);
                for (int i = 0; i < unicodes.length; i++) {
                    System.out.println(unicodes[i]);
                }        } catch (UnsupportedEncodingException e) {            
                e.printStackTrace();
            }输出结果:unicodes=4
    -1
    -2
    97
    0
    unicodes=2
    97
    0
    unicodes=2
    0
    97
      

  3.   

    String temp1 = "/";
    String temp2 = "/";        try {            byte[] unicodes1 = temp1.getBytes("unicode");            System.out.println("unicodes1=" + unicodes1.length);
                for (int i = 0; i < unicodes1.length; i++) {
                    System.out.println(unicodes1[i]);
                }
                byte[] unicodes2 = temp2.getBytes("unicode");            System.out.println("unicodes2=" + unicodes2.length);
                for (int i = 0; i < unicodes2.length; i++) {
                    System.out.println(unicodes2[i]);
                }        }catch (Exception e) {
    // TODO: handle exception
             e.printStackTrace();
    }
    怪怪!!全角和半角的/的到的结果是一样的。
    unicodes1=4
    -1
    -2
    47
    0
    unicodes2=4
    -1
    -2
    47
    0
    最后一位都是0,看样子第二位都的加上32,很明显有问题,看不懂。希望高人解答,我嘛坐一下顺风车。
      

  4.   

    test = str.substring(i, i + 1); 
    这句是把此字符串分割成一个个字符,
    code = test.getBytes("unicode"); 
    得到次字符的unicode编码,赋给bytes数组
    举个例子,比如“a”,unicode默认内存编码表示为(Little Endian):FF  FE 97 00;
    储存成二进制为:11111111  11111110  01100001  00000000;
    之后提取code[i]得到的就是:-1  -2  97  0;
    至于为什么是-1,-2,主要因为java语言二进制数采用的是补码形式。
    有时间可以自己研究下。