【问题标题】:UTF-8 encoding in Spring MVC, problem with FORMsSpring MVC 中的 UTF-8 编码,FORM 的问题
【发布时间】:2011-07-05 17:06:03
【问题描述】:

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

&lt;head&gt;这个:

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

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

【问题讨论】:

  • 您自己的答案是最好的。请接受它
  • 为什么你不接受你自己的答案来帮助别人?
  • 他不能接受。因为他最后一次在 stackoverflow 上看到的是 2011 年 3 月 3 日 12:46 @NaeemShah

标签: spring-mvc character-encoding forms


【解决方案1】:

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

我认为问题仅在于 http 请求编码。因此,我几乎实现了我发现的有关此问题的所有建议,例如更改 server.xml、向 web.xml 添加过滤器以及更改 MySQL 配置文件 my.xml 中的设置。 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");

【讨论】:

  • 你成就了我的一天! URIEncoding="UTF-8" 为我解决了!
  • 我错过了 web.xml 中的编码过滤器,现在它就像魅力一样工作。
  • 这个:viewResolver.setCharacterEncoding("UTF-8"); viewResolver.setContentType("text/html; charset=UTF-8"); templateResolver.setCharacterEncoding("UTF-8"); 为我工作!非常感谢!
【解决方案2】:

请注意,这仅适用于 POST 请求。如果您还想编写 GET 请求(即与 &lt;a href=...&gt; 的链接),则必须修改服务器的 server.xml 文件,在其中添加 URIEncoding="UTF-8" useBodyEncodingForURI="true" 属性&lt;Connector&gt; 标签。

见:http://wiki.apache.org/tomcat/FAQ/CharacterEncoding

【讨论】:

  • 花了整个上午谷歌搜索这个问题。每个人都在建议 URIEncoding 属性,我第一次看到 useBodyEncodingForURI 并为我解决了它,谢谢!
【解决方案3】:

我解决了这个问题。

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

【讨论】:

猜你喜欢
  • 2011-08-04
  • 2019-10-02
  • 2016-01-08
  • 2011-08-21
  • 1970-01-01
  • 2011-11-02
  • 2017-04-27
  • 1970-01-01
相关资源
最近更新 更多