黑马程序员技术交流社区
标题:
字符编码的乱码问题
[打印本页]
作者:
毅心缘
时间:
2014-6-2 19:10
标题:
字符编码的乱码问题
本帖最后由 毅心缘 于 2014-6-2 19:12 编辑
由于编码和解码用的不是同一个编码表,导致乱码。由于编码解码用的都是识别中文的编码表。即使乱码,也可找到对应的数据。所以再编译一次,也找不到原数据。毕老师的视频中说到这个问题,但是没有说解决方案。怎样才能够解决这一问题???求指导!
public class EncodeDemo2 {
public static void main(String[] args) throws Exception {
String s = "你好";
byte[] b1 = s.getBytes("GBK");
System.out.println( Arrays.toString(b1));
String s1 = new String(b1, "UTF-8");
System.out.println("s1=" + s1);
// 出现乱码。重新编译
byte[] b2 = s1.getBytes("UTF-8");
System.out.println( Arrays.toString(b2));
String s2 = new String(b2, "GBK");
System.out.println("s2=" + s2);
}
}
复制代码
作者:
123_yaya
时间:
2014-6-2 19:48
这是很久之前看的视频了,好像原因毕老师有讲。其实楼主把两个“UTF-8"换成”ISO8859-1“,这个乱码是能解决的。毕老师说这个以后学Web开发用得着,因为美国人发明的这个语言,默认的编码是ISO8859-1,到时候编码的是ISO8859-1,解码通用的是UTF-8,到时候再用楼主学到的方法解决乱码就可以了。至于楼主的问题,貌似在实际应用中不会碰到。
public class EncodeDemon2 {
public static void main(String[] args) throws Exception {
String s = "你好";
byte[] b1 = s.getBytes("GBK");
System.out.println( Arrays.toString(b1));
String s1 = new String(b1, "ISO8859-1");
System.out.println("s1=" + s1);
// 出现乱码。重新编译
byte[] b2 = s1.getBytes("ISO8859-1");
System.out.println( Arrays.toString(b2));
String s2 = new String(b2, "GBK");
System.out.println("s2=" + s2);
}
}
复制代码
作者:
Boiled_Water
时间:
2014-6-2 19:55
我记得好像是因为你用GBK编码后得到的二进制数组在UTF-8的编码表中找不到对应的字符后到UTF-8的未知编码区域里找返回未知字符,也就是说返回的字符的二进制编码已经发生了改变,也就没有办法再找回原始内容了。
作者:
panzhenglian
时间:
2014-6-2 20:04
以GBK编码,再以utf-8解码的时候,解出来的数据就已经不是原来的字符串了,改变不回来了,但是反过来是可以的,,如:
public static void main(String[] args) throws UnsupportedEncodingException {
String s = "你好";
byte[] b1 = s.getBytes("UTF-8");
System.out.println("b1=" + new String(b1,"UTF-8"));
String s1 = new String(b1, "GBK");
System.out.println("s1=" + s1);
// 出现乱码。重新编译
byte[] b2 = s1.getBytes("GBK");
String s2 = new String(b2, "utf-8");
System.out.println("s2=" + s2);
}
复制代码
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2