测试如下:try{
   byte[] arg1 =  new byte[]{(byte)96, (byte)0, (byte)3, (byte)63, (byte)63, (byte)-36, 
        (byte)-9, (byte)63, (byte)63,(byte)63, (byte)63, (byte)63, (byte)63,(byte)-49, (byte)-2, 
        (byte)0, (byte)0, (byte)0, (byte)0, (byte)0,(byte) 0, (byte)0};   byte[] arg2 =  new byte[]{(byte)96, (byte)0, (byte)3, (byte)-32, (byte)-1, (byte)-36, 
      (byte)-9, (byte)-1, (byte)-1,(byte)-1, (byte)-1, (byte)-2, (byte)-1,(byte) (byte)-49, (byte)-2, 
      (byte)0, (byte)0,(byte)0, (byte)0, (byte)0,(byte) 0, (byte)0};
   System.out.println("arg1  =:" + new String(arg1,"GB2312"));
   System.out.println("arg2  =:" + new String(arg1,"GB2312"));
   
   String arg3 = new String(arg1,"GB2312");
   byte[] a1 = a.getBytes("GB2312");
   System.out.println("输入出的byte:");
   for (int i = 0; i < a1.length; i++) {
       System.out.print(a1[i]+",");
   }
} catch (Exception e) {
e.printStackTrace();
}  最终输出的结果如下:   请问为什么会出现这种情况??

解决方案 »

  1.   

    说真的,没发现哪里不一样,最主要a.getBytes("GB2312");这个“a”不知道哪来的
      

  2.   

     输出的byte是和arg1一样的,  arg2你在程序里没有使用过。可以尝试下面代码:   String str="你好";
        byte[] a1 = str.getBytes("GB2312");
      System.out.println("输入出的byte:");
      for (int i = 0; i < a1.length; i++) {
      System.out.print(a1[i]+",");
      }   
      arg2 = new byte[]{(byte)-60, (byte)-29, (byte)-70, (byte)-61};
      System.out.println("arg2 =:" + new String(arg2,"GB2312"));应该是一样的。
      

  3.   

    因为将byte[]转换成String的时候,如果这个编码其实是错误的话,则有可能丢失部分字节的。这个没有办法,你应该避免错误的转换String
      

  4.   

    不好意思:“System.out.println("arg2 =:" + new String(arg1,"GB2312"));”这个位置当时编辑的时候写错了:应该是“System.out.println("arg2 =:" + new String(arg2,"GB2312"));”
    “arg1”和“arg2”是两个不同的byte[]数组,但在转换成String 之后,输出的都是一样的,而且arg1转换成String,然后再又转换成byte[],所得的结果恰恰是arg2 byte[]!
      

  5.   


    byte[] a1 = arg3.getBytes("GB2312");
    不好意思的,在发帖编辑格式的时候,弄丢了的!