Ответ 1
Я решил это.
Этот фильтр в файле web.xml должен быть первым фильтром в файле.
У меня это в 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>
и вверху файла file.jsp У меня есть следующее:
<%@ page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
in <head>
this:
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
и символы, отличные от латинского-1, установленные из FORM с методом POST, все еще не верны.
Я решил это.
Этот фильтр в файле web.xml должен быть первым фильтром в файле.
У меня была аналогичная проблема. Когда я отправляю форму и сохраняю ее в БД, она вставляется как?????? но если я вручную вставляю в DB с помощью MySQL WorkBench, он отлично работает.
Я думал, что проблема заключается только в кодировании HTTP-запроса. Итак, я почти выполнил все рекомендации, которые я нашел по этой проблеме, например change 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