黑马程序员技术交流社区

标题: 字符编码的乱码问题 [打印本页]

作者: 毅心缘    时间: 2014-6-2 19:10
标题: 字符编码的乱码问题
本帖最后由 毅心缘 于 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. }
复制代码

作者: 123_yaya    时间: 2014-6-2 19:48
这是很久之前看的视频了,好像原因毕老师有讲。其实楼主把两个“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. }
复制代码

作者: Boiled_Water    时间: 2014-6-2 19:55
我记得好像是因为你用GBK编码后得到的二进制数组在UTF-8的编码表中找不到对应的字符后到UTF-8的未知编码区域里找返回未知字符,也就是说返回的字符的二进制编码已经发生了改变,也就没有办法再找回原始内容了。
作者: panzhenglian    时间: 2014-6-2 20:04
以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.         }
复制代码





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