Spring mvc Spring MVC中的UTF-8编码,表单问题

Spring mvc Spring MVC中的UTF-8编码,表单问题,spring-mvc,character-encoding,forms,Spring Mvc,Character Encoding,Forms,我在web.xml中有这个 <filter> <filter-name>encoding-filter</filter-name> <filter-class> org.springframework.web.filter.CharacterEncodingFilter </filter-class> <init-param>

我在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>

编码过滤器
org.springframework.web.filter.CharacterEncodingFilter
编码
UTF-8
强制编码
真的
编码过滤器
/*
在file.jsp的顶部,我有:

<%@ page pageEncoding="UTF-8" contentType="text/html; charset=UTF-8" %>

中:

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

而且,除了使用method POST的FORM中的latin-1之外的字符集仍然不正确。

我解决了这个问题


web.xml中的过滤器必须是文件中的第一个过滤器。

请注意,这仅适用于POST请求。如果您还想编码获取请求(即与

的链接),我也有类似的问题。当我发布表单并将其保存在DB中时,它会作为?????插入,但如果我使用MySQL工作台手动插入DB,则效果良好

我认为问题只存在于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" />
viewResolver.setCharacterEncoding("UTF-8");
viewResolver.setContentType("text/html; charset=UTF-8");

templateResolver.setCharacterEncoding("UTF-8");
这里的解决方案关键是添加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>

我在提交使用Spring和Romanina字符的网页时也遇到了同样的问题。我完全没有想到它会出现,因为Spring表单使用了与UTF-8不同的编码方式。:)你救了我。谢谢@Sangdol:问题是,即使将pageEncoding指定为UTF-8,现代浏览器在提交POST请求时也不再发送Accept-Encoding标头(请参见),Servlet规范将Latin-1/ISO-8859-1指定为默认值。另请参阅Javadoc for CharacterEncodingFilter:如果您对Spring安全性有问题,您可以查看以下帖子:他不能接受。因为他最后一次出现在stackoverflow上是在2011年3月3日12:46:p@gipinani谢谢你,这件事花了太多时间才解决!你自己的答案是最好的。请接受为什么你不接受自己的答案来帮助别人?他不能接受。因为他最后一次出现在stackoverflow上是在2011年3月3日12:46@Naeemshah你让我开心了
URIEncoding=“UTF-8”
已为我解决!我错过了web.xml中的编码过滤器,现在它像charm一样工作;setContentType(“text/html;charset=UTF-8”);templateResolver.setCharacterEncoding(“UTF-8”)为我工作!非常感谢!花了一上午的时间在谷歌上搜索这个问题。每个人都在建议URIEncoding属性,我第一次看到useBodyEncodingForURI,它为我解决了这个问题,谢谢!
viewResolver.setCharacterEncoding("UTF-8");
viewResolver.setContentType("text/html; charset=UTF-8");

templateResolver.setCharacterEncoding("UTF-8");