Подтвердить что ты не робот

Кодировка UTF-8 в Spring MVC, проблема с формами FORM

У меня это в 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, все еще не верны.

4b9b3361

Ответ 1

Я решил это.

Этот фильтр в файле web.xml должен быть первым фильтром в файле.

Ответ 2

У меня была аналогичная проблема. Когда я отправляю форму и сохраняю ее в БД, она вставляется как?????? но если я вручную вставляю в 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");

Ответ 3

Обратите внимание, что это работает только для запросов POST. Если вы хотите запрограммировать также GET запросы (т.е. ссылки с <a href=...>), вам придется изменить файл сервера server.xml, добавив атрибуты URIEncoding="UTF-8" useBodyEncodingForURI="true" в тег <Connector>.

Смотрите: http://wiki.apache.org/tomcat/FAQ/CharacterEncoding