URLEncoder.encode和getBytes的区别

在Web开发中遇到中文编码问题总是令人头疼,更可怕的是又遇到了似乎很相似似乎又不同,傻傻分不清的URLEncoder.encode和getbytes方法,我试图去解释清二者的区别。

举栗,现在有一个中文词“中国”,我们分别用这两种方法进行解码,还原成一串数字。由于utf-8的汉字占三个字节,所以理论应该得到两个三字节的数字,共六个字节。

一、getBytes()

bytes[] name = "中国".getBytes("utf-8");
for (int i = 0;i < name.length;i++){
    System.out.print(name[i]);
}

结果:-28-72-83-27-101-67 

二、URLEncoder.encode()

String name = URLEncoder.encode("中国","utf-8");

结果:%E4%B8%AD%E5%9B%BD 

 仔细分析一下发现,getBytes返回的是byte数组,符合预期,把“中国”还原成了数组。URLEncoder.encode返回的是String,不符合预期,为什么String的中国解码后还是String,而且是看不懂的神秘代码?更关键的是两者结果似乎不同?

其实再仔细看一下会发现E4正好是-28的十六进制形式,两者只是进制不同!结果其实是一样的!所以说URLEncoder.encode只是格式上对结果做了一点修改,可能是更方便网络传输使用吧。(以后了解更深入再补)

 

 

你可能感兴趣的:(JavaEE学习笔记)