try{
            String a = new String("书不是书".getBytes("GB2312"), "iso-8859-1");
            String b = new String(a.getBytes("iso-8859-1"), "GB2312");
            System.out.println("a = " + a);
            System.out.println("b = " + b);
        }catch(UnsupportedEncodingException e){
            e.printStackTrace();
        }这样就可以了。

解决方案 »

  1.   

    把它用String a=new String("书".getBytes("UTF-8"),"GBK")转换
    然后再String b=a
    就行了
      

  2.   

    不对,中文字符串默认的编码不是"utf-8"的,所以 liuxy163(呆呆牛) 说的是不行的。
    这样倒是可以:
    System.out.println("s = " + new String("书".getBytes(), "gb2312"));
      

  3.   

    楼上的方法当然可以,我只是想问为什么
    把它用String a=new String("书".getBytes("UTF-8"),"ISO8859-1")转换
    然后再String b=new String(a.getBytes("ISO8859-1"),"UTF-8")
    这样可以
    然而
    把它用String a=new String("书".getBytes("UTF-8"),"GBK")转换
    然后再String b=new String(a.getBytes("GBK"),"UTF-8")
    不行
    解析gbk'\u00a6'没有相应的UTF-8编码
      

  4.   

    其实真正要解决的问题是struts 框架中FormFile类的getFileName方法
    我的页面编码是UTF-8,在FILTER中进行了编码转换,到了页面中利用FormFile.getFileName()得到上传文件的文件名,进行new String(filename.getBytes("GBK"),"UTF-8")进行转换文件名然后保存,一个中文字符总是出错,奇数个老是出错,偶数个字符几乎没问题,郁闷ing