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

我有这个在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" /> 

和FORM以方法POST设置的拉丁-1以外的字符仍然不正确。

我解决了这个问题

web.xml中的filter必须先在文件中过滤。

我有类似的问题。 当我发表一个表格并将其保存在数据库中时,它被插入为?????? 但如果我手动插入到数据库使用MySQL WorkBench工作正常。

我认为这个问题只在http请求编码。 所以,我几乎实现了所有关于这个问题的build议,如更改server.xml ,添加filter到web.xml和更改MySQLconfiguration文件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 

解决scheme的关键在于添加useUnicode = yes&characterEncoding = UTF-8

在** web.xml中添加像@jbb这样的filter :**

 <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