java url特殊字符编码_关于urlencode:URL编码和解码Java中的特殊字符

在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);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值