在Java中,我需要使用HTTP Post向服务器发送请求,但如果在URL的参数中包含一些特殊字符,则抛出以下异常
java.lang.IllegalArgumentException:
URLDecoder: Illegal hex characters in
escape (%) pattern - For input string:
"&'"
发送数据的代码
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(URL);
String sessionId = RequestUtil.getRequest().getSession().getId();
String data = arg.getData().toString();
List params = new ArrayList();
params.add(new BasicNameValuePair(param1, data));
params.add(new BasicNameValuePair(param2, sessionId));
httpPost.setEntity(new UrlEncodedFormEntity(params,"UTF-8"));
HttpResponse response = (HttpResponse) httpclient.execute(httpPost);
在服务器端,我使用以下代码来读取信息
String data = request.getParameter(param1);
if (data != null) {
actionArg = new ChannelArg(URLDecoder.decode(data,"UTF-8"));
}
代码工作正常,但如果我输入一些特殊字符,如[aああ#$%&'(<>?/。,あああああ],它将抛出异常。我想知道是否有人可以帮助我一些提示能够编码 并解码特殊字符?
非常感谢你提前。
编码文本以便安全通过互联网:
import java.net.*;
...
try {
encodedValue= URLEncoder.encode(rawValue,"UTF-8");
} catch (UnsupportedEncodingException uee) { }
并解码:
try {
decodedValue = URLDecoder.decode(rawValue,"UTF-8");
} catch (UnsupportedEncodingException uee) { }
谢谢史蒂文,但正如你在我的代码中看到的,我在客户端站点使用UrlEncodedFormEntity(params,"UTF-8")来编码我的对象数据,在服务器端,我使用了URLDecoder.decode(数据,"UTF-8") )解码。 它与日文字符一起正常工作,但是当我输入一些像[#$%&(<>?/。,]这样的字符时)问题才会出现
谢谢它按预期工作hehehe:D
遗憾的是,url编码器无法解决您的问题。 我有这个问题,并使用自定义实用程序。 我记得我是从google搜索获得的;)。
http://www.javapractices.com/topic/TopicAction.do?Id=96
我监督了一个更好的解决方案。 我们的apache朋友有StringEscapeUtils(org.apache.commons.lang.StringEscapeUtils)。 请检查它是否有效。
String data = request.getParameter(param1);
如果这是servlet API,则参数已经被解码。 不需要进一步处理百分比编码。
我没有使用HttpClient,但确保它在标头中发送编码:
Content-type: application/x-www-form-urlencoded; charset=UTF-8
或者,如果必须,在任何getParameter调用之前设置已知编码:
request.setCharacterEncoding("UTF-8");
设置此内容类型对我有用。
那是黄金! 非常感谢
试试番石榴
使用com.google.common.net.UrlEscapers
它适用于中文
像这样:
Escaper escaper = UrlEscapers.urlFragmentEscaper();
String result = escaper.escape(yoururl);