Spring MVC表单上的错误编码

时间:2015-05-21 11:28:43

标签: java spring spring-mvc utf-8 character-encoding

我在Spring MVC控制器中接收表单数据,但是当我尝试输入非ASCII字符时,我收到垃圾,áéíóú被转换为áéíóú

我在jsp页面中使用<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>,Tomcat配置为接受URI / Connection部分中的UTF-8form设置为acceptCharset="UTF-8"。不知道接下来要去哪里看。

我正在使用Ubuntu 14.04在Firefox 38.0上进行测试。服务器也在Ubuntu 14.04中。

2 个答案:

答案 0 :(得分:2)

您需要在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>

答案 1 :(得分:1)

这是因为UTF-8文本被读作latin1编码,每个字符只使用一个字节(例如,á(十六进制值C3 A1)被读为两个latin1字符{{1} }(十六进制值áC3))。

如果A1部分中有<meta>标记,则可以检查HTML输出:

<head>(如果您使用的是HTML5 <meta charset="utf-8" />)。