Кодирование UTF-8 HttpServletRequest
Я хочу получить параметры из запроса (символы с акцентами), но это не работает. Я пытался использовать request.setCharacterEncoding( "UTF-8" )
но он тоже не работал.
Я знаю, что URLDecoder.decode( request.getQueryString(), "UTF-8" )
возвращает мне символы прав, но request.getParameterValues()
не работает! У кого-нибудь есть идея?
Ответы
Ответ 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: Павел, я не отвечал тебе раньше, но я уже делал это. Спасибо в любом случае за вашу помощь.