我有一个基于tomcat的应用程序,需要提交一个能够处理utf-8字符的表单.通过ajax提交时,数据从utf-8中的getParameter()正确返回.通过表单发布提交时,数据将从iso-8859-1中的getParameter()返回.
我使用了fiddler,并确定了请求的唯一区别,就是在ajax调用中将charset = utf-8附加到Content-Type头的末尾(正如预期的那样,因为我明确地发送了内容类型).
来自ajax的ContentType:"application/x-www-form-urlencoded; charset = utf-8"
来自表单的ContentType:"application/x-www-form-urlencoded"
我有以下设置:
ajax post(正确输出字符):
$.ajax( {
type : "POST",
url : "blah",
async : false,
contentType: "application/x-www-form-urlencoded; charset=utf-8",
data : data,
success : function(data) {
}
});
Run Code Online (Sandbox Code Playgroud)
表格帖子(在iso中输出字符)
<form id="leadform" enctype="application/x-www-form-urlencoded; charset=utf-8" method="post" accept-charset="utf-8" action="{//app/path}">
Run Code Online (Sandbox Code Playgroud)
xml声明:
<?xml version="1.0" encoding="utf-8"?>
Run Code Online (Sandbox Code Playgroud)
文档类型:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
Run Code Online (Sandbox Code Playgroud)
元标记:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
Run Code Online (Sandbox Code Playgroud)
jvm参数:
-Dfile.encoding=UTF-8
Run Code Online (Sandbox Code Playgroud)
我也尝试过使用request.setCharacterEncoding("UTF-8"); 但似乎tomcat只是忽略了它.我没有使用RequestDumper阀门.
根据我的阅读,POST数据编码主要取决于表单所在的页面编码.据我所知,我的页面在utf-8中正确编码.
此页面中的示例JSP正常工作.它只使用setCharacterEncoding("UTF-8"); 并回复您发布的数据. http://wiki.apache.org/tomcat/FAQ/CharacterEncoding
总而言之,post请求不会将charset作为utf-8发送,尽管页面在utf-8中,表单参数指定utf-8,xml声明或其他任何内容.我已经花了三天的时间来完成这项工作,但我的想法已经不多了.谁能帮我?