我解决了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)。当我使用英文字母写数据时,一切正常!但是,当我尝试在输入文本框中使用俄语字母时,它会以不正确的编码形式写一些奇怪的字母。如何避免这个问题?
有任何想法吗?
您需要在中配置字符编码过滤器web.xml:
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"在<Connector>中进行设置conf/server.xml。
URIEncoding="UTF-8"
<Connector>
conf/server.xml