比方:
String str = "王老五";
String teststr = new String(str.getBytes("GB2312"), "UTF-8");
String recover = new String(teststr.getBytes("UTF-8"), "GB2312");按道理讲recover的内容应该会恢复成str的内容一样吧,但是显示出来recover还是乱码,这是为什么呢?我怎样才能从teststr转换出原来的str呢?谢谢!

解决方案 »

  1.   

    按道理没有人把UTF8编码的数据当GB2312来解码。
    也没有人把GB2312编码的数据当UTF8来解码。GB2312转String(UNICODE)是要对照符号表的
    UTF8编码也是有特定的编码规则。
    解码时,对于不符合UTF8编码规则的编码,或GB2312<==>UNICODE符号表中不存在的编码,
    就会丢失数据或出错。
      

  2.   

    String teststr = new String(str.getBytes("GB2312"), "UTF-8");
    String recover = new String(teststr.getBytes("UTF-8"), "GB2312");////////////////////////////
    看来没有正确理解编码
    String teststr = new String(str.getBytes("GB2312"), "ISO-8859-1");
    String recover = new String(teststr.getBytes("ISO-8859-1"), "GB2312");这样才可以 ISO-8859-1 不会丢失信息
      

  3.   

    我哭啊~~~~事情是这样地:我在JSP页面中用Ajax向Servlet提交信息。页面是GB2312的,当提交中文时,FireFox死都要当成UTF-8来提交,所以Servlet收到的就一堆乱码。我不知道怎样把乱码恢复回来。
      

  4.   

    感谢doway(john),FireFox提交的东西总算出来了,不过IE提交的又变成乱码了~~~~
    我自己再想想办法算了……
      

  5.   

    表单提交内容采用的编码与当前页面一致。搂主在编码方面有概念上的误解,推荐文章:
    http://www.regexlab.com/zh/encoding.htm