测试最近的代码发现,有一个servlet处理通过post方式传递过来的参数的时候偶尔出现乱码,并提示错误“org.apache.tomcat.util.http.Parameters processParameters Parameters: Character decoding failed”,开始以为是编码问题,google了一大堆关于编码的问题,各种测试还是无法解决这个问题。于是把出错的参数调了出来用类似二分法的方式慢慢筛查参数,最后锁定在参数中的%上,因为要传递的参数不是经常出现%,所以就出现偶尔出错的现象。解决方法就是把参数中的“%”替换为“%25”,修改代码为
,问题解决。
下面附录是URL中的特殊字符:
- parameter = parameter.replace("%","%25")
下面附录是URL中的特殊字符:
- 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>
评论
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包,解决个人的 import org.apache.commons.beanutils.PropertyUtilsBean; import org.apache.commons.lang.StringUtils; import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi...
下载HttpClient,解压,在Eclipse中导入所有JAR import org.apache.http.HttpResponse; import org.apache.http.NameValuePair; import org.apache....import org.apache.http.util.EntityUtils;
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...
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;
包含 import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons....import org.apache.commons.httpclient.util.HttpURLConnection;
<Call Stack = DEBUG_FRAME = org.apache.axis2.util.JavaUtils.callStackToString(JavaUtils.java:564) DEBUG_FRAME = org.apache.axis2.description.ParameterIncludeImpl.debugParameterAdd(ParameterIncludeImpl...
org.jbundle.util.osgi.wrapped.org.apache.http.client-4.1.2.jar
org.apache.commons.net.util.jar
在开发基于Axis2的Web服务时,可能会遇到各种错误和异常,其中之一就是与`org.apache.axis2.util.JavaUtils.callStackToString`相关的问题。这个问题通常出现在Axis2尝试获取并打印堆栈跟踪信息时。 `...
jar包,亲测可用
6. `org.apache.http.util.EntityUtils`: 提供了处理HTTP实体的实用方法,如解析响应体为字符串或字节数组。 四、使用示例 创建一个简单的HTTP GET请求: ```java CloseableHttpClient httpClient = HttpClients....
这个库的核心部分就是`org.apache.http`包,它包含了处理HTTP请求和响应的各种类和接口。当我们遇到"找不到org.apache.http.?的库"的错误时,通常意味着开发环境中缺少了这个依赖。 Apache HTTP Components Client ...
在本案例中,"org.apache.xmlbeans.jar" 是XMLBeans库的实现,它是Java开发中处理Excel文件的一个重要工具。 XMLBeans的工作原理基于XML Schema,它将XSD文件解析为一套Java类和接口,这些类和接口代表了XML Schema...
org.apache.axis2.jar
标题中的"org.apache.HTTP需要的jar包"指的是Apache HTTP组件的核心部分,用于构建HTTP客户端应用。描述中提到了两个关键的压缩包:`httpcomponents-client-4.5.5-bin.zip`和`httpcomponents-core-4.4.9-bin.zip`,...
apache-tomcat-8.5.78 源码 maven 版本,配置都已经搞定,开箱即用。是学习tomcat的不二之选。启动类 org.apache.catalina.startup.Bootstrap
这个"org.apache.poi"依赖包是Java开发者在处理这些文件时不可或缺的工具。它提供了丰富的API,使得在Java环境中读取、写入和操作Office文档变得轻而易举。 Apache POI 3.17 版本是该项目的一个稳定版本,包含了...
import org.apache.tools.zip.ZipEntry; import org.apache.tools.zip.ZipFile; import org.apache.tools.zip.ZipOutputStream; /** * * 类名: ZipUtil.java * 描述:压缩/解压缩zip包处理类 * 创建...
http协议所需依赖包基本全部包含,这也是我自己初学下载的,不知道哪些管用,就全部包含进去再说>< import java.io.IOException;...import org.apache.http.util.EntityUtils; 这些导入不会报错反正
在Java Web开发中,我们经常会遇到“org.apache.jasper.JasperException: java.util.MissingResourceException”这样的错误。这个异常通常发生在尝试访问一个不存在的资源文件时,比如国际化(i18n)配置文件。本文...