Кодировка UTF-8 в Spring MVC, проблема с ФОРМАМИ
У меня есть это в web.xml
<filter>
<filter-name>encoding-filter</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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding-filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
и в верхней части файла.jsp у меня есть это:
<%@ page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
в <head>
этот:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
и символы, отличные от latin-1, установленные из FORM с помощью метода POST, все еще не верны.
3 ответа
Я решил это.
Этот фильтр в web.xml должен быть первым фильтром в файле.
У меня была похожая проблема. Когда я размещаю форму и сохраняю ее в БД, она вставляется как?????? но если я вручную вставляю в БД с помощью MySQL WorkBench, она работает нормально.
Я думал, что проблема только в кодировке HTTP-запроса. Итак, я почти выполнил все рекомендации, которые нашел по этой проблеме, такие как изменение server.xml, добавление фильтра в web.xml и изменение настроек в конфигурационном файле MySQL my.ini, но это не решает мою проблему.
Проблема была связана с двумя вещами: кодировкой HTTP-запроса и соединением JDBC. По какой-то причине MySQL принимает данные как ISO-8859-1, а не как UTF-8.
Итак, я отменил все изменения и внес следующие два изменения:измените Tomcat server.xml, как показано ниже:
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8" />
Измените свойства соединения Jdbc, как показано ниже:
jdbc.driver_class=com.mysql.jdbc.Driver
jdbc.url=jdbc:mysql://localhost/dB_Name?useUnicode=yes&characterEncoding=UTF-8
jdbc.username=root
jdbc.password
Ключом решения здесь является добавление useUnicode=yes&characterEncoding=UTF-8
Добавьте фильтр, как @jbb сделал в ** web.xml: **
<filter>
<filter-name>encoding-filter</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>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encoding-filter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Если используется Thymeleaf, измените viewResolver и TemplateResolver, как показано ниже:
viewResolver.setCharacterEncoding("UTF-8");
viewResolver.setContentType("text/html; charset=UTF-8");
templateResolver.setCharacterEncoding("UTF-8");
Обратите внимание, что это работает только для запросов POST. Если вы хотите кодировать также GET- запросы (т.е. ссылки с <a href=...>
), вам придется изменить файл server.xml вашего сервера, добавив URIEncoding="UTF-8" useBodyEncodingForURI="true"
атрибуты в <Connector>
тег.
Смотрите: http://wiki.apache.org/tomcat/FAQ/CharacterEncoding