urlencode和urldecode 与 tomcat处理urlencode请求参数

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编码的,其中的中文字符不能正确映射,

所以要是想正确映射,必须要自己进行转码。

 

 

 

 

 

 

 

posted @ 2014-01-26 02:46  Jinks  阅读(6671)  评论(0编辑  收藏  举报