给个例子: 1.String name = "中国"; 2.String afterE=new String(name.getBytes(),"utf-8"); 3.String then = new String(afterE.getBytes("utf-8"),"gbk"); 4.System.out.println(then); 经过调试,发现name经过第二句话后变成了三个字符,当然是乱码,经过第四句后then为四个汉字,不是中国,为什么?
String name = "中国";
String afterE = new String(name.getBytes("utf-8"),"gbk");
System.out.println(afterE);
String then = new String(afterE.getBytes("gbk"),"utf-8");
System.out.println(then);
String name = "中国";此时的“中国”在内存里面是用unicode编码的字符。
new String(name.getBytes(),"utf-8");
name.getBytes():把unicode编码的字符用gbk方式转化成字节数组,很显然,转化是行不通的!
然后,又把转化错了的字节数组用utf-8转化成字符,输入就错了,输出肯定不对!
String name = "中国";
2.String afterE=new String(name.getBytes("utf-8"),"utf-8");
3.String then = new String(afterE.getBytes("gbk"),"gbk");
4.System.out.println(then);
这样是对的,因为utf-8中char是2个字节,gbk中char是1个字节.
then = new String(afterE.getBytes("utf-8"),"gbk");
你获得的是utf-8编码的字节,却传进gbk当然会不对了,编码他会根据你给的字节在编码表里面查找相应的字符,找不到或找错就是乱码或者奇怪文字
new String(byte[],Srting) 是将字节数组的字节转化为String(Unicode编码的),你要告诉他你给的是什么编码的字节数组