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

时间:2011-01-30 05:24:20

标签: java urlencode

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

  

java.lang.IllegalArgumentException异常:   URLDecoder:非法的十六进制字符   escape(%)pattern - 对于输入字符串:   “&安培;'”

发送数据的代码

DefaultHttpClient httpclient = new DefaultHttpClient(); 
   HttpPost httpPost = new HttpPost(URL); 

   String sessionId = RequestUtil.getRequest().getSession().getId();
   String data = arg.getData().toString();

   List<NameValuePair> params = new ArrayList<NameValuePair>();   
   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ああ#$%&amp;'(&lt;&gt;?/。,あああああ),​​它会抛出异常。我想知道是否有人可以帮我一些提示能够编码和解码特殊字符?

非常感谢你。

4 个答案:

答案 0 :(得分:8)

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

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

要解码:

try {
    decodedValue = URLDecoder.decode(rawValue, "UTF-8");
} catch (UnsupportedEncodingException uee) { }

答案 1 :(得分:5)

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

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

答案 2 :(得分:3)

String data = request.getParameter(param1);

如果这是servlet API,则参数已被解码。不需要进一步处理百分比编码。


我没有使用HttpClient,但确保它在标头中发送编码:

Content-type: application/x-www-form-urlencoded; charset=UTF-8

或者,如果必须,请在任何getParameter来电之前设置已知编码:

request.setCharacterEncoding("UTF-8");

答案 3 :(得分:1)

尝试番石榴

使用com.google.common.net.UrlEscapers

它适用于中文

像这样:

Escaper escaper = UrlEscapers.urlFragmentEscaper();
String result = escaper.escape(yoururl);