我有一个基于tomcat的应用程序,需要提交能够处理utf-8字符的表单。通过ajax提交时,数据会从utf-8中的getParameter()中正确返回。通过表单发布提交时,数据从iso-8859-1中的getParameter()返回。
我使用了提琴手,并且确定了请求中的 唯一 区别是 charset = utf-8 附加到了ajax调用中 Content-Type
标头的末尾(正如预期的那样,因为我明确地发送了内容类型)。
来自ajax的ContentType:“应用程序/ 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) {
}
});
表单发布(在iso中输出chars)
xml声明:
Doctype:
元标记:
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
综上所述,尽管页面位于utf-8,指定utf-8的表单参数,xml声明或其他任何内容,但是post请求不会将字符集发送为utf-8。我花了三天的大部分时间来解决这个问题,但我的想法已经用完了。谁能帮我?