UTF-8编码,JSP,jQuery,Spring的问题

h0m*_*r16 5 jquery jsp spring-mvc utf-8 character-encoding

我和春天有,JSP和jQuery中的Apache Tomcat 6 Web应用程序,一个jsp页面中有一个AJAX调用发送数据作出丝毫的jQuery,到春天的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> 
.
.
Run Code Online (Sandbox Code Playgroud)

在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(),...
Run Code Online (Sandbox Code Playgroud)

在tomcat server.xml上:

<Connector connectionTimeout="20000" port="8080" URIEncoding="UTF-8" protocol="HTTP/1.1" redirectPort="8443"/>
Run Code Online (Sandbox Code Playgroud)

在MultiActionController上

public ModelAndView saveData(HttpServletRequest request,HttpServletResponse response) 
    throws ServletException, IOException 
    {
        request.setCharacterEncoding("UTF-8");
        String name = request.getParameter("name");
Run Code Online (Sandbox Code Playgroud)

所以如果在name参数中我放了这样的东西:

玛丽亚

在后端,我得到

MarÃa.

我已经尝试了所有我读到的东西,我不知道错误是什么,谢谢你的帮助:)

Bal*_*usC 16

一切看起来都很好,直到你在变量中得到参数.它只是你的后端,仍然需要配置为使用UTF-8.例如,System.out.println()您要将检索到的参数发送到的记录器或者也应该使用UTF-8.或者您存储检索参数的数据库也应该使用UTF-8.或者与该DB交互的JDBC驱动程序.或者您要将数据写入的文本文件.等等.

也可以看看:


你的具体问题无关,这条线

request.setCharacterEncoding("UTF-8");
Run Code Online (Sandbox Code Playgroud)

应该 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>
Run Code Online (Sandbox Code Playgroud)