UTF-8编码,JSP,jQuery,Spring的问题
问题内容:
我在apache tomcat
6中有一个带有spring,jsp和jquery的Web应用程序,一个jsp页面具有一种形式,该形式将带有jquery的ajax调用的数据发送到后端的Spring
MultiActionController。
问题出在表单输入中的UTF-8字符串。
我已经做了以下事情:
在我的HTML上:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>
<%@ page contentType="text/html; charset=utf-8" %>
<%@ page language="java" pageEncoding="utf-8"%>
<html>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<head>
.
.
在jquery ajax调用上:
$.ajaxSetup({ scriptCharset: "utf-8" ,contentType: "application/x-www-form-urlencoded; charset=UTF-8" });
$.ajax(
{
type: "GET",
url: "./saveData.action",
contentType: "charset=utf-8",
data: { name: $('#name').val(),...
在tomcat server.xml上:
<Connector connectionTimeout="20000" port="8080" URIEncoding="UTF-8" protocol="HTTP/1.1" redirectPort="8443"/>
在MultiActionController上
public ModelAndView saveData(HttpServletRequest request,HttpServletResponse response)
throws ServletException, IOException
{
request.setCharacterEncoding("UTF-8");
String name = request.getParameter("name");
因此,如果在name参数中输入以下内容:
玛丽亚
在后端我得到
玛拉
我已经尝试了我所读过的所有内容,但我不知道这是什么错误,谢谢您的帮助:)
问题答案:
一切正常,直到您在变量中获得参数为止。只是您的后端,仍然需要配置为使用UTF-8。例如,System.out.println()
要将检索到的参数发送到的或记录器也应使用UTF-8。或者,用于存储检索到的参数的数据库也应使用UTF-8。或与该数据库交互的JDBC驱动程序。或您要将数据写入其中的文本文件。Etcetera。
也可以看看:
与 您的具体问题 无关 ,线
request.setCharacterEncoding("UTF-8");
应该 在 Spring启动 之前
执行。它设置POST请求的编码,并且只要Spring在执行操作之前确定请求主体,就会失败(请注意,此行对GET请求完全无效)。Spring有一个CharacterEncodingFilter
做到这一点。在您的位置注册web.xml
:
<filter>
<filter-name>characterEncodingFilter</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>characterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>