首先,在编对了,解错的时候,要用解错的码再编回去,然后再用正确的码表解码。所以程序中后面再解回去的时候,
应该是 byte[] b2 = s1.getBytes("utf-8");
String s2 = new String(b2,"gbk");
但是,由于GBK和UTF-8码表都识别中文,所以这里还是会出现错误。如下,
public class Test
{
public static void main(String[] args) throws Exception
{
String s ="你好";
byte[] b1 = s.getBytes("gbk");
System.out.println("b1 = "+Arrays.toString(b1)); // 这里可以看看它的编码:[-60, -29, -70, -61]
String s1 = new String(b1,"utf-8");
System.out.println(s1); // 由于GBK和UTF-8都识别中文,所以在解码时:???
byte[] b2 = s1.getBytes("utf-8");
System.out.println("b2 = "+Arrays.toString(b2)); // 再用UTF-8编回去的时候:[-17, -65, -67, -17, -65, -67, -17, -65, -67] 拿到的源码已经发生的变化
String s2 = new String(b2,"gbk");
System.out.println(s2); // 所以再用GBK去解码时,是按照变化的源码进行解码的:锟斤拷锟?
}
但是使用ISO8859-1就不会出现混乱的情况。这里要特别注意GBK和UTF-8。
}
|