黑马程序员技术交流社区

标题: GBK和UTF-8乱码转换问题 [打印本页]

作者: 李震 李震 李震    时间: 2012-4-17 22:09
标题: GBK和UTF-8乱码转换问题
  1.         public static void main(String[] args)throws Exception {
  2.                 String str="你好";
  3.                 byte[] buf=str.getBytes("GBK");
  4.                 String str2=new String(buf,"UTF-8");
  5.                 System.out.println(str2);
  6.                 //这里已经是乱码的UTF-8中文
  7.                
  8.                
  9.                 String str3=new String(str2.getBytes("UTF-8"),"GBK");
  10.                 System.out.println(str3);//UTF-8里面码表和GBK的码表是不一样的所以查出来也是乱码
  11.                
  12.         }
复制代码
我的疑问是要怎么样才能把乱码的UT-F8转换出来正常的中文呢?
作者: liuyang    时间: 2012-4-17 22:38
你上面个的那种情况应该属于解码时用错了编码表,应该用GBk的你用成了UTF-8由于这两张表每个字符占用的字节数的不同,所以不能再反转回来了,如果你你解码时用错的编码表是欧洲编码表的话还能反转回来
作者: 刘蕴学    时间: 2012-4-17 23:08
本帖最后由 了无尘 于 2012-4-18 00:41 编辑

你应该是觉得解码一次utf-8之后在编码成utf-8还是原来的gbk编码,实际上已经不是了
  1. public static void main(String[] args) throws Exception
  2.         {
  3.         
  4.                 String str="你好";
  5.         byte[] buf=str.getBytes("GBK");
  6.         String str2=new String(buf,"UTF-8");
  7.         System.out.println(str2);
  8.         //这里已经是乱码的UTF-8中文
  9.         
  10.         byte[] bas = str2.getBytes("UTF-8");
  11.         
  12.         System.out.println(Arrays.equals(buf, bas));
  13.         
  14.         String str3=new String(str2.getBytes("UTF-8"),"GBK");
  15.         System.out.println(str3);//UTF-8里面码表和GBK的码表是不一样的所以查出来也是乱码
  16.                
  17.         }
复制代码
这里边打印的是false。。。

getBytes()方法,无论有没有参数都会编码,无参的默认是根据平台默认的编码方式编码,中间如果有一次错误的解码就没办法了,查表应该会出错,暂时也没办法解释这个问题
new String()这个方法,也是一样的,不管写不写解码方式,也都会解码。。。

楼上说的没错,只有ISO-8859-1这一种可以反转,其他的都不行




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2