编码···
public static void menthod() throws IOException
{
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);
}
}
/*
[-60, -29, -70, -61]
s1=???
[-17, -65, -67, -17, -65, -67, -17, -65, -67]
s2==锟斤拷锟?
这个问题我不得不说下····,困惑我很久
拿GBK编码出现[-60, -29, -70, -61]
按utf-8解码出现???这是什么呢?这是三个字符(困惑的地方是utf-8解码是按一个字符三个字节,那这三个???是三个字符啊,那就是要9个字节去才能找出这???问号这是怎么找出三个的呢?按道理最多是两个问号才对啊?),既然是三个字符。那gbk再去找九个字节,就是四个汉字外加半个出现了锟斤拷锟? 这可以理解。
只有一种解释..就是???这三个是不需要三个字节来对应一个的?。要不然无法解释了。 |