Кодировка UTF-8 в Spring MVC, проблема с ФОРМАМИ - PullRequest
60 голосов
/ 28 февраля 2011

У меня есть это в 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" %>

в <head> это:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

и символы, отличные от латиницы-1, установленные из FORM с помощью метода POST, по-прежнему неверны.

Ответы [ 3 ]

82 голосов
/ 28 февраля 2011

Я решил это.

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

13 голосов
/ 08 ноября 2014

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

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

См .: http://wiki.apache.org/tomcat/FAQ/CharacterEncoding

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...