Подтвердить что ты не робот

Кодирование UTF-8 HttpServletRequest

Я хочу получить параметры из запроса (символы с акцентами), но это не работает. Я пытался использовать request.setCharacterEncoding( "UTF-8" ) но он тоже не работал.

Я знаю, что URLDecoder.decode( request.getQueryString(), "UTF-8" ) возвращает мне символы прав, но request.getParameterValues() не работает! У кого-нибудь есть идея?

4b9b3361

Ответ 1

Предложение Paul похоже на лучший способ действий, но если вы собираетесь его обойти, вам вообще не нужен URLEncoder или URLDecoder:

String item = request.getParameter("param"); 

byte[] bytes = item.getBytes(StandardCharsets.ISO_8859_1);
item = new String(bytes, StandardCharsets.UTF_8);

// Java 6:
// byte[] bytes = item.getBytes("ISO-8859-1");
// item = new String(bytes, "UTF-8");

Обновление:. Поскольку это получает много голосов, я хочу подчеркнуть точку BalusC, что это определенно не решение; это в лучшем случае обходной путь. Люди не должны этого делать.

Я точно не знаю, что вызвало исходную проблему, но я подозреваю, что URL-адрес уже закодирован в кодировке UTF-8, а затем снова был закодирован UTF-8.

Ответ 2

Если вы используете Apache Tomcat, request.setCharacterEncoding("UTF-8") работает только с запросом POST.

Для запроса GET вам нужно добавить URIEncoding="UTF-8" в ваш <Connector> в server.xml.

Смотрите больше в FAQ/CharacterEncoding - Apache Tomcat wiki space.

Ответ 3

Ну, я нашел способ решить свою проблему, я думаю, что это не лучшее решение, но оно работает.

  String item = request.getParameterValues("param"); // Hélène
  item = URLEncoder.encode( model.getNameItem(), "ISO-8859-1" ); // H%C3%A9l%C3%A8ne
  item = URLDecoder.decode( item, "UTF-8" ); // and finally : Hélène

Если это может помочь кому угодно, я рад помочь:)

PS: Павел, я не отвечал тебе раньше, но я уже делал это. Спасибо в любом случае за вашу помощь.