我在JSP页面中对数据编码存在一些问题(我使用的是Spring-MVC)。 它看起来像这样:
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%
response.setHeader("Cache-Control", "no-cache"); //HTTP 1.1
response.setHeader("Pragma", "no-cache"); //HTTP 1.0
response.setDateHeader("Expires", 0);
response.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("UTF-8");
%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
.....
<form method="post">
<input type="text" name="txt" value="${Name}" />
<input type="submit" value= OK />
</form>
........
我的应用程序从输入文本框中获取文本并将其写入数据库(HSQLDB)。当我使用英文字母写数据时,一切正常!但是当我在输入文本框中尝试使用俄语字母时,它会以不正确的编码形式写出一些奇怪的字母。如何避免这个问题?
有什么想法吗?
答案 0 :(得分:5)
您需要在web.xml
中配置字符编码过滤器:
<filter>
<filter-name>charsetEncodingFilter</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>
</filter>
<filter-mapping>
<filter-name>charsetEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
如果没有指定请求编码,Servlet容器将POST请求数据视为ISO-8859-1,而浏览器以页面编码(在您的情况下为UTF-8)提交表单,并且不会指定编码,因此您需要一个过滤器来指定正确的请求编码。
编辑:正如BalusC正确提到的,它不包括GET请求的编码问题。要在Tomcat上修复此问题,您需要在URIEncoding="UTF-8"
的{{1}}上设置<Connector>
。