为什么 POST 不支持字符集,而 AJAX 请求却支持字符集?雄猫 6
我有一个基于tomcat的应用程序,需要提交能够处理utf-8字符的表单。当通过 ajax 提交时,数据从 utf-8 中的 getParameter() 正确返回。通过表单发布提交时,数据从 iso-8859-1 中的 getParameter() 返回。
我使用了fiddler,并且已经确定了请求中的唯一区别,即charset=utf-8被附加到ajax调用中Content-Type标头的末尾(正如预期的那样,因为我显式发送了内容类型)。
ContentType from ajax: “application/x-www-form-urlencoded;字符集 = utf-8”
ContentType from form: “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) {
}
});
表单发布(输出 iso 中的字符)
<form id="leadform" enctype="application/x-www-form-urlencoded; charset=utf-8" method="post" accept-charset="utf-8" action="{//app/path}">
xml 声明:
<?xml version="1.0" encoding="utf-8"?>
文档类型:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
元标记:
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
jvm 参数:
-Dfile.encoding=UTF-8
我也尝试过使用 request.setCharacterEncoding(“UTF-8”);但似乎 tomcat 只是忽略了它。我没有使用 RequestDumper 阀。
根据我所读到的内容,POST数据编码主要取决于表单所在的页面编码。据我所知,我的页面以utf-8正确编码。
此页面中的示例 JSP 工作正常。它只是使用 setCharacterEncoding(“UTF-8”),并回显您发布 http://wiki.apache.org/tomcat/FAQ/CharacterEncoding 的数据。
总而言之,post 请求不会将字符集作为 utf-8 发送,尽管页面是 utf-8 格式参数,指定 utf-8 的表单参数,xml 声明或其他任何内容。我花了三天的大部分时间在这上面,没有想法了。任何人都可以帮我吗?