String str=new String("这是一个对中文支持的测试".getBytes("GBK"),"ISO-8859-1");{1}String str2=new String(str.getBytes("ISO-8859-1"),"gbk");{2}System.out.println(str2);
能转换回中文,在JAVA中显示.但是当我把{1}改成了:String str=new String("这是一个对中文支持的测试".getBytes("ISO-8859-1"));{3}
要如何转换回来呢?

解决方案 »

  1.   

    Exectpion  打错了,应该是Exception
      

  2.   

    String str=new String("这是一个对中文支持的测试".getBytes("ISO-8859-1"));
    这个本身就会得到错误的bytes,估计是不能转回去了。
      

  3.   

    String str=new String("这是一个对中文支持的测试".getBytes("ISO-8859-1"));
    不对吧,我又HTMLUNIT的时候就是这种编码,判断的时候两个编码是一模一样的.
      

  4.   

    String str2=new String(str.getBytes("ISO-8859-1"));{4}用这句就可以了。
      

  5.   

    public class StringDemo {
    public static void main(String[] args) throws Exception {
    String s = "中文";// GBK 编码中 "汉字" 这两个字的编码为: D6D0 CEC4
    // System.out.println("\u4E2D\u6587");// "中文" 这两个字在内存中的表现为 \u4E2D\u6587, 即 Unidode 表示
    byte[] buf = s.getBytes("GBK");//得到 D6D0 CEC4 对应的二进制数组: 11010110 11010000 11001110 11000100; buf.length = 4;
    // t = "中文", 调用 String(byte[]) = String(byte[], 默认编码), 而一般的中文操作系统默认编码为 GBK, 所以等价于 new String(buf, "GBK")
    // 当然也等价于 new String(buf, "GB2312"), 因为 "中文" 这两个字在 GB2312 的编码中与 GBK 一样
    String t = new String(buf);
    System.out.println(t);// 打印出 "中文" 两个字

    // 下一句会把 buf 即 (11010110 11010000 11001110 11000100) 这些二进制当作 ISO-8859-1 编码来对待
    // 由于 ISO-8859-1 的编码是单字节, 故会将这四个二进制当作四个字符来对待, 而这四个二进制都没有对应的 ISO-8859-1 字符
    // 就会返回 "?", 这就是 "?" 的由来, 为什么会转变为 "?" 呢, 这是因为有规定说: 如上给定一个二进制数 11010110, 要转化为 ISO-8859-1 编码
    // 而这个二进制数在 ISO-8859-1 这个编码里并不存在
    // 这样就会返回 "?"
    String r = new String(buf, "ISO-8859-1");// 返回四个 "?", 这种没有造成数据丢失, 故可以还原
    System.out.println(r);
    System.out.println(new String(r.getBytes("ISO-8859-1"), "GBK"));

    //根据 ISO-8859-1 的编码规则来解码, 得到 63 63, 即两个 "?"
    // 它会把 "中文"(在内存中占四字节) 两个字当作两个字符来对待, 跟上面一样, 找不到这样的对应, 故生成两个 "?"
    // 这样算是造成了数据丢失, 当然不可能返回啦
    byte[] bb = s.getBytes("ISO-8859-1");
    System.out.println(new String(bb));
    }
    }