URL编码和解码Java中的特殊字符

在Java中,我需要使用HTTP Post向服务器发送请求,但是如果在URL的参数中包含一些特殊字符,则会抛出以下exception

java.lang.IllegalArgumentException:URLDecoder:转义(%)模式中的非法hex字符 – 对于输入字符串:“&’”

发送数据的代码

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ああ#$%&’(?/。,あああああ],它将抛出异常。我想知道是否有人可以帮我一些提示能够编码并解码特殊字符?

非常感谢你提前。

遗憾的是,url编码器无法解决您的问题。 我有这个问题,并使用自定义实用程序。 我记得我是从google搜索获得的;)。

http://www.javapractices.com/topic/TopicAction.do?Id=96

编码文本以便安全通过互联网:

 import java.net.*; ... try { encodedValue= URLEncoder.encode(rawValue, "UTF-8"); } catch (UnsupportedEncodingException uee) { } 

并解码:

 try { decodedValue = URLDecoder.decode(rawValue, "UTF-8"); } catch (UnsupportedEncodingException uee) { } 
 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);