UTF-8编码、JSP、jQuery、Spring的问题
我在ApacheTomcat6中有一个带有spring、jsp和jquery的web应用程序,一个jsp页面有一个表单,通过jquery发出的ajax调用将数据发送到我后端的spring MultiActionController 问题在于表单输入中的UTF-8字符串 我已经做了以下几件事: 在我的HTML上: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
<?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>