boss44 发表于 2017-1-14 10:12:18

解决URL参数中的%问题(org.apache.tomcat.util.http.Parameters processParameters Paramete)

测试最近的代码发现,有一个servlet处理通过post方式传递过来的参数的时候偶尔出现乱码,并提示错误“org.apache.tomcat.util.http.Parameters processParameters  Parameters: Character decoding failed”,开始以为是编码问题,google了一大堆关于编码的问题,各种测试还是无法解决这个问题。于是把出错的参数调了出来用类似二分法的方式慢慢筛查参数,最后锁定在参数中的%上,因为要传递的参数不是经常出现%,所以就出现偶尔出错的现象。解决方法就是把参数中的“%”替换为“%25”,修改代码为Java代码  


[*]parameter = parameter.replace("%","%25")  

,问题解决。 
下面附录是URL中的特殊字符: 
Java代码  


[*]URL中一些字符的特殊含义,基本编码规则如下:   
[*]1、空格换成加号(+)   
[*]2、正斜杠(/)分隔目录和子目录   
[*]3、问号(?)分隔URL和查询   
[*]4、百分号(%)制定特殊字符   
[*]5、#号指定书签   
[*]6、&号分隔参数   
[*]  
[*]如果需要在URL中用到,需要将这些特殊字符换成相应的十六进制的值   
[*]+   %20   
[*]/   %2F   
[*]?   %3F   
[*]%   %25   
[*]#   %23   
[*]&   %26  


  <iframe style="font-size: 12px; line-height: 18px;" src="http://lwjlaser.iteye.com/iframe_ggbd/187" frameborder="0" scrolling="no" width="468" height="60"></iframe>





分享到:  

Ubuntu中无法修改Chrome默认字体的问题 | MySQL数据库备份和还原的常用命令


[*]2011-05-23 15:36
[*]浏览 11444
[*]评论(5)
[*]分类:编程语言
[*]相关推荐

评论
5 楼 lwjlaser 2011-05-25  
Technoboy 写道
ilrxx 写道
传参数之前urlencode一次下,然后接受参数后再urldecode一下就行了啊

对于不同的字符集,encode一次是不行的,必须encode两次!

求详细解答。encode两次编码格式是一样的吗?是不是也需要解码两次?

4 楼 Technoboy 2011-05-24  
ilrxx 写道
传参数之前urlencode一次下,然后接受参数后再urldecode一下就行了啊

对于不同的字符集,encode一次是不行的,必须encode两次!

3 楼 ilrxx 2011-05-24  
传参数之前urlencode一次下,然后接受参数后再urldecode一下就行了啊

2 楼 lwjlaser 2011-05-24  
Technoboy 写道
 
引用
parameter = parameter.replace("%","%25") 

为什么这么做的原因,就是因为编码问题!
浏览器会两次encode我们的参数,服务器会decode一次,不同服务器decode的结果也不一样,tomcat默认用ISO-8859-1字符集decode。然后我们自己decode一次。
规则类似于:java.net.URLEncoder和URLDecoder。


对,我也查到了,不过我用的HttpURLConnection发的post,HttpURLConnection没有对url参数进行编码。所以会产生那样的错误。以后可以直接使用java.net.URLEncoder对url参数先进行编码。

1 楼 Technoboy 2011-05-23  
 
引用
parameter = parameter.replace("%","%25") 

为什么这么做的原因,就是因为编码问题! 
浏览器会两次encode我们的参数,服务器会decode一次,不同服务器decode的结果也不一样,tomcat默认用ISO-8859-1字符集decode。然后我们自己decode一次。 
规则类似于:java.net.URLEncoder和URLDecoder。
 
本文来源于:http://lwjlaser.iteye.com/blog/1055359
页: [1]
查看完整版本: 解决URL参数中的%问题(org.apache.tomcat.util.http.Parameters processParameters Paramete)