A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李震 李震 李震 中级黑马   /  2012-4-17 22:09  /  4347 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

  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转换出来正常的中文呢?

2 个回复

倒序浏览
你上面个的那种情况应该属于解码时用错了编码表,应该用GBk的你用成了UTF-8由于这两张表每个字符占用的字节数的不同,所以不能再反转回来了,如果你你解码时用错的编码表是欧洲编码表的话还能反转回来

评分

参与人数 1技术分 +1 收起 理由
贠(yun)靖 + 1

查看全部评分

回复 使用道具 举报
本帖最后由 了无尘 于 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这一种可以反转,其他的都不行
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马