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

UTF-8编码、JSP、jQuery、Spring的问题,jquery,jsp,spring-mvc,utf-8,character-encoding,Jquery,Jsp,Spring Mvc,Utf 8,Character Encoding,我在ApacheTomcat6中有一个带有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

我在ApacheTomcat6中有一个带有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> 
.
.
在tomcat server.xml上:

<Connector connectionTimeout="20000" port="8080" URIEncoding="UTF-8" protocol="HTTP/1.1" redirectPort="8443"/>
因此,如果我在name参数中输入如下内容:

玛丽亚

在后端,我得到

马吕亚


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

我在字符方面也遇到了同样的问题,我用以下方法解决了它:

request.setCharacterEncoding("utf-8");
                StringBuffer requestContent = new StringBuffer();
                do
                {
                    bytesRead = request.getInputStream().readLine(bytes,0,bytes.length);
                    if(bytesRead > 0)
                    {
                        requestContent.append(new String(bytes,0,bytesRead,"UTF-8"));
                    }
                }
                while(bytesRead > 0);

然后从requestContent中提取以“name=“

开始的字符串,直到在变量中获取参数为止,所有内容看起来都正常。只是您的后端仍然需要配置为使用UTF-8。例如,将检索到的参数发送到的
System.out.println()
或记录器也应该使用UTF-8。或者存储检索到的参数的数据库也应该使用UTF-8。或者与该数据库交互的JDBC驱动程序。或者您正在向其中写入数据的文本文件。等等

另见:

与您的具体问题无关,该行

request.setCharacterEncoding("UTF-8");
应该在Spring启动之前执行。它设置请求后编码,每当Spring在执行操作之前确定请求主体时,这将失败(请注意,此行对GET请求完全没有影响)。Spring有一个
characterencoding过滤器
,它正是这样做的。在您的
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>

字符编码滤波器
org.springframework.web.filter.CharacterEncodingFilter
编码
UTF-8
强制编码
真的
字符编码滤波器
/*

request.setCharacterEncoding()对GET请求完全没有影响。
request.getInputStream()
在GET请求中不返回任何内容。Tomcat的
中的
URIEncoding
对GET请求起作用。这已经设置好了。不过,您提出的方法是一种变通方法,而不是一种解决方案。谢谢BalusC,我更改了DB,也更改了de web.xml,现在它工作正常:)如何将其添加到web.xml?在…内标签?因为当我这样做的时候,我的项目没有成功运行。我遇到了完全相同的问题,将过滤器添加到xml中就成功了。我不确定我的开发服务器上是否安装了utf-8,但我正在手动转换为unicode。
request.setCharacterEncoding("UTF-8");
<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>