У меня есть это веб-приложение в JSP, запущенном на JBoss Application Server. Я использую сервлеты для дружественных URL-адресов. Я отправляю параметры поиска через мои JSP и сервлеты. Я использую форму с текстовым полем, Servlet
Первый сервлет использует request.getParameter()
для получения текста и отправляет его на другой сервлет с помощью response.sendRedirect
(маскируя URL-адрес для чего-то "дружественного" ). Этот последний сервлет использует request.getRequestDispatcher().forward()
для отправки параметров в JSP "уродливым" способом: searchResults.jsp?searchParameters=Parameters
.
Теперь, когда отображается страница результатов поиска, URL-адрес отображает правильный поисковый запрос с "дружественным URL". Пример: http://site.com/search/My-Search-Query
даже при использовании специальных символов, таких как: http://site.com/search/Busqué-tildes-y-eñies
. Но когда я пытаюсь использовать этот термин поиска в своем JSP, специальные символы отображаются неправильно.
Вся система использует i18n, и до сих пор у нас не было проблем со специальными символами. Но когда информация отправляется через форму (скажем, из index.jsp в searchResults.jsp), специальные символы отображаются неправильно:
á - á
é - é
í - Ã
ó - ó
ú - ú
ñ - ñ
Вся база кода должна находиться в UTF-8, но, видимо, я пропускаю что-то при передаче параметров. Как я уже сказал, они правильно отображаются в URL-адресе, но не внутри JSP.
Я думал о преобразовании этих á
вручную, но я предполагаю, что лучший способ сделать это правильно, используя правильную кодировку. Кроме того, могут появляться новые персонажи, которые я могу не знать прямо сейчас (французский, испанский и т.д.).
На всякий случай, я дам вам знать, что у меня есть эти строки на каждом JSP:
<?xml version="1.0" encoding="UTF-8" ?>
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
ИЗМЕНИТЬ
Спасибо за ваши ответы. Я пробовал несколько вещей, но ничто не устранило проблему.
Вот что я сделал:
-
Я добавил ServletRequestListener, который устанавливает кодировку символов сеанса в UTF-8 и фильтр для каждого запроса Http, который делает то же самое.
-
Как я уже сказал, все в JSP закодировано UTF-8 (см. заголовки, о которых идет речь).
-
Я напечатал кодировку символов Servlets на консоли, которые по умолчанию были пустыми, установили их в UTF-8, например, @kgiannakakis и @saua.
Ни одно из этих действий не устраняет проблему. Мне интересно, если что-то еще не так с этим...