Проблемы с кодировкой символов в 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'sserver.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>