jsp页面编码问题

Iln*_*nur 0 spring jsp spring-mvc character-encoding

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

........
Run Code Online (Sandbox Code Playgroud)

我的应用程序从输入文本框中获取文本并将其写入数据库(HSQLDB).当我使用英文字母写数据时,一切正常!但是当我在输入文本框中尝试使用俄语字母时,它会以不正确的编码形式写出一些奇怪的字母.如何避免这个问题?

有任何想法吗?

axt*_*avt 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>
Run Code Online (Sandbox Code Playgroud)

如果未指定请求编码,Servlet容器将POST请求数据视为ISO-8859-1,而浏览器以页面编码(在您的情况下为UTF-8)提交表单,并且不会指定编码,因此您需要一个过滤器指定正确的请求编码.

编辑:正如BalusC正确提到的,它不包括GET请求的编码问题.为了解决这个问题上的Tomcat需要设置URIEncoding="UTF-8"<Connector>conf/server.xml.

  • 对Spring用户的好建议,但应注意的是,这只包括POST请求,而不是GET请求.它是[简单过滤器]的方式(http://kickjava.com/src/org/springframework/web/filter/CharacterEncodingFilter.java.htm).所有它基本上都是`request.setCharacterEncoding()`如果`request.getCharacterEncoding()`返回null. (2认同)