黑马程序员技术交流社区
标题:
GBK和UTF-8乱码转换问题
[打印本页]
作者:
李震 李震 李震
时间:
2012-4-17 22:09
标题:
GBK和UTF-8乱码转换问题
public static void main(String[] args)throws Exception {
String str="你好";
byte[] buf=str.getBytes("GBK");
String str2=new String(buf,"UTF-8");
System.out.println(str2);
//这里已经是乱码的UTF-8中文
String str3=new String(str2.getBytes("UTF-8"),"GBK");
System.out.println(str3);//UTF-8里面码表和GBK的码表是不一样的所以查出来也是乱码
}
复制代码
我的疑问是要怎么样才能把乱码的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编码,实际上已经不是了
public static void main(String[] args) throws Exception
{
String str="你好";
byte[] buf=str.getBytes("GBK");
String str2=new String(buf,"UTF-8");
System.out.println(str2);
//这里已经是乱码的UTF-8中文
byte[] bas = str2.getBytes("UTF-8");
System.out.println(Arrays.equals(buf, bas));
String str3=new String(str2.getBytes("UTF-8"),"GBK");
System.out.println(str3);//UTF-8里面码表和GBK的码表是不一样的所以查出来也是乱码
}
复制代码
这里边打印的是false。。。
getBytes()方法,无论有没有参数都会编码,无参的默认是根据平台默认的编码方式编码,中间如果有一次错误的解码就没办法了,查表应该会出错,暂时也没办法解释这个问题
new String()这个方法,也是一样的,不管写不写解码方式,也都会解码。。。
楼上说的没错,只有ISO-8859-1这一种可以反转,其他的都不行
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2