urlencode实际上是为了在url中支持一些非ascii字符而采用的一种对url进行编码的方式
比如,当我们进行get请求时,可能遇到请求的值为中文
如下:
如我们请求http://localhost:8080/test4/TestCharset资源时附带参数名为(haha)值为(我 是中国人)
此时请求url应该为http://localhost:8080/test4/TestCharset?haha=我 是中国人
但是url是不支持非ascii字符的,所以就要进行urlencode,而一般浏览器帮我们做这件事情
urlencode 具体的方法就是 将遇到的非ascii字符 转换成 UTF-8编码(字符串形式) 再将获得的UTF-8编码字符串形式的每2个字符(即代表实际编码的一个字节)前加上%
用上面的例子来说就是
我 是中国人
其中的"我"对应的utf-8编码是 E68891(十六进制) 所以urlencode后就编程%E6%88%91(字符串)
而空格会被换成%20
所以以上例子整个urlencode后变成了
http://localhost:8080/test4/TestCharset?haha=%E6%88%91%20%E6%98%AF%E4%B8%AD%E5%9B%BD%E4%BA%BA
%E6%88%91代表“我”
%20代表" "(空格)
%E6%98%AF代表"是"
......
大家可以从这里查看每个汉字对应的utf-8编码 进行对比 http://blog.csdn.net/qiaqia609/article/details/8069678
urldecode就是urlencode的逆过程,不用再赘述了
在tomcat中 获取值为中文的参数时往往会遇到乱码问题
其实处理方式很简单 接上面例子 只要如下就行
String test = request.getParameter("haha");
System.out.println(new
String(test.getBytes("iso-8859-1"),"utf-8"));
其实urlencode和urldecode与Servlet参数没什么关系,只是我当初错误的以为需要自己对参数值进行decode,才写了这个东西以便让自己记住。
urlencode浏览器帮我们做,urldecode tomcat会帮我们做,只不过tomcat是老外写的,所以parameter值是被iso-8859-1编码的,其中的中文字符不能正确映射,
所以要是想正确映射,必须要自己进行转码。