URL-кодирование и декодирование Специальный символ в Java - PullRequest
16 голосов
/ 30 января 2011

В 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 あ あ # $% & '(<>? /., あ あ あ あ あ], он выдаст исключение. способен кодировать и декодировать специальные символы?

Заранее большое спасибо.

Ответы [ 4 ]

9 голосов
/ 30 января 2011

Для кодирования текста для безопасного прохождения через интернет:

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

И для декодирования:

try {
    decodedValue = URLDecoder.decode(rawValue, "UTF-8");
} catch (UnsupportedEncodingException uee) { }
5 голосов
/ 30 января 2011

К сожалению, URL-кодировщик не решит вашу проблему.У меня была эта проблема и я использовал пользовательскую утилиту.Я помню это, я получил от поиска в Google;).

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

3 голосов
/ 30 января 2011
String data = request.getParameter(param1);

Если это API сервлета , параметры уже были декодированы.Дальнейшая обработка кодирования процентов не требуется.


Я не использовал HttpClient, но убедитесь, что он отправляет кодировку в заголовке:

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

Или, если необходимо, установить известную кодировку перед любыми getParameter вызовами:

request.setCharacterEncoding("UTF-8");
1 голос
/ 06 ноября 2016

попробуй гуаву

используйте com.google.common.net.UrlEscapers

отлично работает с китайским

как это:

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