class EncodeDemo
{
public static void main(String[] args)throws Exception
{
String s = "哈哈";//默认使用GBK编码
byte[] b1 = s.getBytes("GBK");//使用GBK解码[-71, -2, -71, -2]
System.out.println(Arrays.toString(b1));
String s1 = new String(b1,"utf-8");//使用UTF-8编码
System.out.println("s1="+s1);
//对s1进行iso8859-1编码。
byte[] b2 = s1.getBytes("utf-8");
System.out.println(Arrays.toString(b2));
String s2 = new String(b2,"gbk");
System.out.println("s2="+s2);
/*
是UTF-8支持中文造成的。当使用GBK编码后,生成字节码[-71, -2, -71, -2],UTF-8使用最多三个 字节表示一个字符,得到s1=????,然后将?在自己码表里查找对应字节码,这里是一个字符代表三位得到 [-17, -65, -67, -17, -65, -67, -17, -65, -67, -17, -65, -67],这份字节码已经不是原来那份自己码。 使用GBK解码出现乱码。GBK两个字节代表一个字符,得s2 = 锟斤拷锟斤拷
注意:在使用GBK编码时,不可以使用UTF-8进行解码,可以使用不支持中文的编码方式进行解码,但要得到原数据,需要使用该编码方式进行一次编码,在使用GBK进行解码。
过程:GBK编码-ISO8859-1解码-ISO8859-1编码-GBK解码。
*/
}
} |