Параметр японской ссылки искажен в Struts2 - PullRequest
0 голосов
/ 27 декабря 2011

У меня есть эта ссылка в моем приложении 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 Ответ

0 голосов
/ 27 декабря 2011

Это простой фильтр, который сделает это.Вам просто нужно добавить этот фильтр в ваш 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. То же самое мы имеем по умолчанию в javaкодировка.

прочитайте эту замечательную статью Unicode-How-To-Get-символы-право от BalusC.

надеюсь, это поможет вам.

...