Параметр японской ссылки искажен в Struts2
У меня есть эта ссылка в моем приложении Struts2:
<a href="/MyApp/My.action?w=%E8%A8%80%E8%91%89&key=6f98f58ce">Link</a>
%E8%A8%80%E8%91%89
отображается как 言葉
в строке состояния браузера, что хорошо.
ПРОБЛЕМА: при нажатии на эту ссылку HttpRequest от Struts2 получает w
как искаженный текст è¨è
(видно с отладкой Eclipse). w
затем распечатывается в JSP, где он отображается как è¨è
в браузере.
В чем проблема? Как я могу это исправить?
Заметки:
- HTML-страницы содержат
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
- Chrome 16.0.912.63 на Ubuntu 2011.04
1 ответ
Это простой фильтр, который сделает это. Вам просто нужно добавить этот фильтр в ваш web.xml перед фильтром struts2.
public class CharacterEncodingFilter implements Filter
{
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain next)
throws IOException, ServletException
{
String encoding = request.getCharacterEncoding();
if (encoding == null || encoding.length() == 0)
{
request.setCharacterEncoding("UTF-8");
}
next.doFilter(request, response);
}
}
не уверен, хотя это будет работать, так как не пробовал сам:)
Обновить
даже после вышеупомянутого фильтра я также столкнулся с той же проблемой, и после некоторого копания, как я понимаю, из-за того, что сервер приложений по умолчанию будет использовать кодировку символов ISO 8859-1.
я добавил следующую запись в мой файл tomcat server.xml
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8"/>
URIEncoding="UTF-8" // this is what i added
и теперь я могу видеть правильный символ в моем jsp page.same, который мы имеем дело с кодировкой java по умолчанию.
Прочитайте эту замечательную статью " Юникод-как-получить-символы-прямо" от BalusC.
Надеюсь, что это поможет вам.