黑马程序员技术交流社区
标题:
关于编码解码问题
[打印本页]
作者:
a3330682
时间:
2014-4-27 12:58
标题:
关于编码解码问题
本帖最后由 a3330682 于 2014-4-27 14:56 编辑
class EncodeDemo
{
public static void main(String[] args)throws Exception
{
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);
//对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解码结果s2=s2=锟斤拷锟斤拷
作者:
wconho
时间:
2014-4-27 14:21
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解码。
*/
}
}
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2