Spring MVC中的UTF-8编码,FORMs的问题

jbb*_*jbb 62 forms spring-mvc character-encoding

我在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>
Run Code Online (Sandbox Code Playgroud)

在file.jsp的顶部我有这个:

<%@ page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>
Run Code Online (Sandbox Code Playgroud)

<head>这:

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
Run Code Online (Sandbox Code Playgroud)

和使用方法POST从FORM设置的latin-1以外的字符仍然不正确.

jbb*_*jbb 83

我解决了这个问题

web.xml中的过滤器必须首先在文件中过滤.

  • 你知道为什么吗? (3认同)

Aym*_*bsi 13

我有类似的问题.当我发布一个表单并将其保存在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" />
Run Code Online (Sandbox Code Playgroud)

更改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
Run Code Online (Sandbox Code Playgroud)

解决方案的关键是添加useUnicode = yes和characterEncoding = UTF-8

在**web.xml中添加像@jbb这样的过滤器:**

<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>
Run Code Online (Sandbox Code Playgroud)

如果使用Thymeleaf,请更改viewResolver和TemplateResolver,如下所示:

viewResolver.setCharacterEncoding("UTF-8");
viewResolver.setContentType("text/html; charset=UTF-8");

templateResolver.setCharacterEncoding("UTF-8");
Run Code Online (Sandbox Code Playgroud)


小智 8

请注意,这仅适用于POST请求.如果您还要编写GET请求(即链接<a href=...>),则必须通过在标记中添加属性来修改服务器的server.xml文件.URIEncoding="UTF-8" useBodyEncodingForURI="true"<Connector>

请参阅:http://wiki.apache.org/tomcat/FAQ/CharacterEncoding