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-8
,form
设置为 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 字符 á
(十六进制值 C3
和 A1
))。
如果 <head>
部分有 <meta>
标签,您可以检查 HTML 输出:
<meta charset="utf-8" />
(如果您使用 HTML5 DOCTYPE
)。
我在我的 Spring MVC 控制器中接收表单数据,但是当我尝试输入非 ASCII 字符时我收到垃圾,áéíóú
被转换为 áéÃóú
。
我在 jsp 页面中使用 <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
,Tomcat 配置为在 URI/Connection 部分接受 UTF-8
,form
设置为 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 字符 á
(十六进制值 C3
和 A1
))。
如果 <head>
部分有 <meta>
标签,您可以检查 HTML 输出:
<meta charset="utf-8" />
(如果您使用 HTML5 DOCTYPE
)。