2010-11-28 94 views
0

我回家了一些JSP页面中的数据编码问题(我正在使用Spring-MVC)。 它看起来像这样:jsp页面编码问题

<%@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)。当我用英文字母写数据时,它一切正常!但是当我试图在输入文本框中使用俄文字母时,它会以不正确的编码形式编写一些奇怪的字母。如何避免这个问题?

任何想法?

+1

你的`缓存控制`条目的方式[不完整](http://stackoverflow.com/questions/49547/making-sure-a-web-page-is-not-cached-across-all-浏览器/ 2068407#2068407)。它在Firefox中不起作用,等等。另外,两个`setCharacterEncoding()`调用都是多余的,因为对于`request`来说已经太晚了,并且你已经设置了`pageEncoding`,它已经隐含地做了`response`。 – BalusC 2010-11-28 18:32:00

+0

哦......我不知道。所以,我可以删除行response.setCharacterEncoding(“UTF-8”); request.setCharacterEncoding(“UTF-8”); ?我试图把这一行放在这里来解决编码问题。但一切都没有奏效,直到axtavt没有给我一个Spring编码过滤器的解决方案。 – Ilnur 2010-11-28 18:55:43

回答

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,如果请求编码不specifed,而浏览器提交页面编码形式( UTF-8在你的情况下)并且不确定地不指定编码,因此你需要一个过滤器来指定正确的请求编码。

编辑:正如BalusC所提到的,它没有涵盖GET请求的编码问题。要修复Tomcat的问题,您需要在conf/server.xml<Connector>上设置URIEncoding="UTF-8"