Ответ 1
К сожалению, кодировщик URL не решит вашу проблему. У меня была эта проблема и я использовал специальную утилиту. Я помню, что я получил от googling;).
В Java мне нужно использовать HTTP Post для отправки запроса на сервер, но если в параметре URL-адреса содержится какой-то специальный символ, он выдает ниже Exception
java.lang.IllegalArgumentException: URLDecoder: нелегальные шестнадцатеричные символы в escape (%) - для строки ввода: "& Амп; '"
Код для отправки данных
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 あ あ # $% & '(< > ?/., あ あ あ あ あ], он будет генерировать исключение. Интересно, может ли кто-нибудь помочь мне в подсказке чтобы иметь возможность кодировать и декодировать специальные символы?
Спасибо вам заблаговременно.
К сожалению, кодировщик URL не решит вашу проблему. У меня была эта проблема и я использовал специальную утилиту. Я помню, что я получил от googling;).
Чтобы закодировать текст для безопасного прохода через интернетов:
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);
Если это API сервлета, параметры уже декодированы. Никакой дополнительной обработки процентного кодирования не требуется.
Я не использовал HttpClient, но убедитесь, что он отправляет кодировку в заголовок:
Content-type: application/x-www-form-urlencoded; charset=UTF-8
Или, если необходимо, установите известную кодировку перед любыми вызовами getParameter
:
request.setCharacterEncoding("UTF-8");
попробуйте guava
используйте com.google.common.net.UrlEscapers
он отлично работает с китайским
вот так:
Escaper escaper = UrlEscapers.urlFragmentEscaper();
String result = escaper.escape(yoururl);