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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 毅心缘 中级黑马   /  2014-6-2 19:10  /  925 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 毅心缘 于 2014-6-2 19:12 编辑

由于编码和解码用的不是同一个编码表,导致乱码。由于编码解码用的都是识别中文的编码表。即使乱码,也可找到对应的数据。所以再编译一次,也找不到原数据。毕老师的视频中说到这个问题,但是没有说解决方案。怎样才能够解决这一问题???求指导!

  1. public class EncodeDemo2 {
  2.         public static void main(String[] args) throws Exception {
  3.                 String s = "你好";

  4.                 byte[] b1 = s.getBytes("GBK");
  5.                 System.out.println( Arrays.toString(b1));

  6.                 String s1 = new String(b1, "UTF-8");
  7.                 System.out.println("s1=" + s1);

  8.                 // 出现乱码。重新编译
  9.                 byte[] b2 = s1.getBytes("UTF-8");
  10.                 System.out.println( Arrays.toString(b2));

  11.                 String s2 = new String(b2, "GBK");
  12.                 System.out.println("s2=" + s2);
  13.         }

  14. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

3 个回复

倒序浏览
这是很久之前看的视频了,好像原因毕老师有讲。其实楼主把两个“UTF-8"换成”ISO8859-1“,这个乱码是能解决的。毕老师说这个以后学Web开发用得着,因为美国人发明的这个语言,默认的编码是ISO8859-1,到时候编码的是ISO8859-1,解码通用的是UTF-8,到时候再用楼主学到的方法解决乱码就可以了。至于楼主的问题,貌似在实际应用中不会碰到。
  1. public class EncodeDemon2 {
  2.     public static void main(String[] args) throws Exception {
  3.             String s = "你好";

  4.             byte[] b1 = s.getBytes("GBK");
  5.             System.out.println( Arrays.toString(b1));

  6.             String s1 = new String(b1, "ISO8859-1");
  7.             System.out.println("s1=" + s1);

  8.             // 出现乱码。重新编译
  9.             byte[] b2 = s1.getBytes("ISO8859-1");
  10.             System.out.println( Arrays.toString(b2));

  11.             String s2 = new String(b2, "GBK");
  12.             System.out.println("s2=" + s2);
  13.     }

  14. }
复制代码
回复 使用道具 举报
我记得好像是因为你用GBK编码后得到的二进制数组在UTF-8的编码表中找不到对应的字符后到UTF-8的未知编码区域里找返回未知字符,也就是说返回的字符的二进制编码已经发生了改变,也就没有办法再找回原始内容了。
回复 使用道具 举报
以GBK编码,再以utf-8解码的时候,解出来的数据就已经不是原来的字符串了,改变不回来了,但是反过来是可以的,,如:
  1.         public static void main(String[] args) throws UnsupportedEncodingException {

  2.                 String s = "你好";

  3.                 byte[] b1 = s.getBytes("UTF-8");
  4.                
  5.                 System.out.println("b1=" + new String(b1,"UTF-8"));

  6.                 String s1 = new String(b1, "GBK");
  7.                 System.out.println("s1=" + s1);

  8.                 // 出现乱码。重新编译
  9.                 byte[] b2 = s1.getBytes("GBK");
  10.                
  11.                 String s2 = new String(b2, "utf-8");
  12.                 System.out.println("s2=" + s2);
  13.         }
复制代码

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马