Проблемы с кодировкой символов в Tomcat

У меня проблемы с кодировкой символов для веб-приложения. Существует всплывающее окно, которое запрашивает базу данных с пользовательским вводом (поиск человека по имени). Проблема в том, что акцентированные символы превращаются в странные буквы, такие как ó => ó, Это довольно стандартная проблема, но я не могу понять, что происходит.

Что я сделал?

В основном, следуйте этому.

  • Установка первого фильтра на моего кота (request&response).setCharacterEncoding("UTF-8");
  • Настройка каждого web.xml, server.xml параметр кодировки символов <?xml version='1.0' encoding='utf-8'?>,
  • Изменение URIEncoding на UTF-8 в разъемах. Используя Firebug, я уже вижу, что тип контента установлен на text/html; utf-8 на постах get (которые в основном с проблемами)
  • Измените мета-типы и @page на jsp на UTF-8.

Но у меня все еще есть те же проблемы, хотя некоторые были решены, например, некоторые акцентированные письма, отправленные с сервера клиенту, отображаются правильно.

У меня установлены apache2.2 и tomcat 6.

Я не знаю, что еще делать, и какую соответствующую информацию я должен публиковать здесь (если вам что-то нужно, пожалуйста, сообщите мне)...

Заранее спасибо.

3 ответа

Решение

Убедитесь, что кодировка также установлена ​​прямо на уровне базы данных и драйвера JDBC. Как это сделать, зависит от марки / версии драйвера БД и JDBC. За подробностями обращайтесь к документации по драйверу DB и JDBC. Например, для драйвера JDBC MySQL необходимо добавить два конкретных параметра в URL-адрес подключения JDBC.

Кстати, настройка кодировки XML-файла и метатегов не влияет на кодировку HTTP-запросов / ответов. Только следующее должно быть минимально настроено для веб-приложения на основе JSP/Servlet:

  • Для запросов HTTP GET настройте его на уровне сервера. В Tomcat это можно сделать, установив URIEncoding атрибут <Connector> в Tomcat's server.xml,

  • Для запросов HTTP POST используйте фильтр, который выполняет ServletRequest#setCharacterEncoding(),

  • Для ответов HTTP, генерируемых JSP, установите pageEncoding атрибут <%@page%> на основе JSP, или, лучше, установить <page-encoding> вход в web.xml для всего приложения.

  • Для HTTP-ответов, генерируемых сервлетами (в которых не участвует JSP!), Используйте ServletResponse#setCharacterEncoding(),

  • И последнее, но не менее важное: убедитесь, что ваши файлы исходного кода также сохранены как UTF-8. Точная конфигурация зависит от используемого редактора. В случае Eclipse вы можете управлять им через Window> Properties> General> Workspace> Text File Encoding.

Смотрите также:

В варианте Java для пользователей Debian в

/etc/default/tomcat7

Я положил это

set JAVA_OPTS=-Djavax.servlet.request.encoding=UTF-8 -Dfile.encoding=UTF-8

тогда все кодировки выглядят как UTF-8 по умолчанию.

Для меня это решило проблему.

Наконец-то полезной для меня стала эта статья

Мое резюме:

Добавьте атрибут "URIEncoding="UTF-8" к вашему коннектору в server.xml.

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000"  redirectPort="8443" URIEncoding="UTF-8"/>

Затем добавьте серверный фильтр для кодировки символов. В случае с котом с пружиной добавьте следующие строки в web.xml:

<filter>
    <filter-name>charsetFilter</filter-name>
    <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
    <init-param>
        <param-name>encoding</param-name>
        <param-value>UTF-8</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>charsetFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
Другие вопросы по тегам