`

解决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代码  收藏代码
  1. parameter = parameter.replace("%","%25")  
,问题解决。 
下面附录是URL中的特殊字符: 
Java代码  收藏代码
  1. URL中一些字符的特殊含义,基本编码规则如下:   
  2. 1、空格换成加号(+)   
  3. 2、正斜杠(/)分隔目录和子目录   
  4. 3、问号(?)分隔URL和查询   
  5. 4、百分号(%)制定特殊字符   
  6. 5、#号指定书签   
  7. 6、&号分隔参数   
  8.   
  9. 如果需要在URL中用到,需要将这些特殊字符换成相应的十六进制的值   
  10. +   %20   
  11. /   %2F   
  12. ?   %3F   
  13. %   %25   
  14. #   %23   
  15. &   %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>

3 
3 
分享到:  
评论
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。
 
分享到:
评论

相关推荐

    org.apache.poi jar包

    org.apache.poi JAR包,解决个人的 import org.apache.commons.beanutils.PropertyUtilsBean; import org.apache.commons.lang.StringUtils; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi...

    org.apache.http jar包

    下载HttpClient,解压,在Eclipse中导入所有JAR import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache....import org.apache.http.util.EntityUtils;

    org.apache.http包

    import org.apache.http.HttpResponse; import org.apache.http.HttpStatus; import org.apache.http.HttpVersion; import org.apache.http.client.HttpClient;...import org.apache.http.util.EntityUtils;

    org.apache.poi JAR包

    org.apache.poi JAR包,解决个人的 import org.apache.commons.beanutils.PropertyUtilsBean; import org.apache.commons.lang.StringUtils; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi...

    可用org.apache.commons.httpclient-3.1.0.jar.zip

    包含 import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons....import org.apache.commons.httpclient.util.HttpURLConnection;

    axis2解决 org.apache.axis2.util.JavaUtils.callStackToString问题

    axis2解决 org.apache.axis2.util.JavaUtils.callStackToString问题

    org.jbundle.util.osgi.wrapped.org.apache.http.client-4.1.2.jar

    org.jbundle.util.osgi.wrapped.org.apache.http.client-4.1.2.jar

    axis2.jar 解决 org.apache.axis2.util.JavaUtils.callStackToString问题

    &lt;Call Stack = DEBUG_FRAME = org.apache.axis2.util.JavaUtils.callStackToString(JavaUtils.java:564) DEBUG_FRAME = org.apache.axis2.description.ParameterIncludeImpl.debugParameterAdd(ParameterIncludeImpl...

    org.apache.commons.net.util.jar

    org.apache.commons.net.util.jar

    org.apache.axis2.jar

    org.apache.axis2.jar

    org.apache.tools.zip解决解压乱码问题

    import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; import org.apache.tools.zip.ZipOutputStream; /** * * 类名: ZipUtil.java * 描述:压缩/解压缩zip包处理类 * 创建...

    org.apache.HTTP需要的jar包

    httpcomponents-client-4.5.5-bin.zip HttpCore :httpcomponents-core-4.4.9-bin.zip

    java 正则表达试

    jakarta-oro.jar 及代码 import org.apache.oro.text.regex.MalformedPatternException; import org.apache.oro.text.regex.MatchResult; import org.apache.oro.text.regex...import org.apache.oro.text.regex.Util;

    tomcat下cors跨域解决架包

    cors-filter-1.7.jar java-property-utils-1.9.jar

    apache-tomcat-util.jar

    jar包,亲测可用

    http依赖jar包.zip

    http协议所需依赖包基本全部包含,这也是我自己初学下载的,不知道哪些管用,就全部包含进去再说&gt;&lt; import java.io.IOException;...import org.apache.http.util.EntityUtils; 这些导入不会报错反正

    apache-tomcat-8.5.78 源码 maven 版本

    apache-tomcat-8.5.78 源码 maven 版本,配置都已经搞定,开箱即用。是学习tomcat的不二之选。启动类 org.apache.catalina.startup.Bootstrap

    信息: Deploying web application directory lx01

    at org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119) at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1053) at org.apache.catalina.core....

    hadoop0.23.9离线api

    org.apache.hadoop.security.authentication.util org.apache.hadoop.streaming org.apache.hadoop.streaming.io org.apache.hadoop.tools.mapred org.apache.hadoop.tools.mapred.lib org.apache.hadoop.tools...

    base64 三个jar包

    使用base64加解密的jar包,提供三种,对应就有三种方法。详细操作博客里有,不会的小伙伴可以自己去查看!啊啊啊啊,还不够100字。

Global site tag (gtag.js) - Google Analytics