Spring MVC 格式编码错误

Erroneous encoding on form to Spring MVC

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

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

发生这种情况是因为 UTF-8 文本被读取为 latin1 编码,每个字符仅使用一个字节(例如,á(十六进制值 C3 A1)被读取为两个 latin1 字符 á(十六进制值 C3A1))。

如果 <head> 部分有 <meta> 标签,您可以检查 HTML 输出:

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