【发布时间】:2011-05-22 12:18:39
【问题描述】:
我有一个基于 tomcat 的应用程序,需要提交能够处理 utf-8 字符的表单。通过 ajax 提交时,数据从 utf-8 中的 getParameter() 正确返回。通过表单 post 提交时,数据从 iso-8859-1 中的 getParameter() 返回。
我使用了提琴手,并确定了请求中唯一的区别是 charset=utf-8 附加到 Content- 的末尾在 ajax 调用中键入 标头(正如预期的那样,因为我显式发送了内容类型)。
来自 ajax 的内容类型: "application/x-www-form-urlencoded; charset=utf-8"
来自表单的ContentType: "应用程序/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) {
}
});
form post(输出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
总而言之,尽管页面是 utf-8、指定 utf-8 的表单参数、xml 声明或其他任何内容,但 post 请求不会将字符集作为 utf-8 发送。我花了三天的大部分时间来解决这个问题,但我的想法已经不多了。谁能帮帮我?
【问题讨论】:
-
那么听起来这不是 tomcat 问题,而是浏览器问题,因为 tomcat 似乎能够正确处理传入的 UTF 请求,不是吗? Fiddler 是前 tomcat。你在不同的浏览器上试过吗?
-
在 firefox 3.6.12/linux、firefox 3.6.3/winxp、chrome 7.0.517.44/linux、8.0.552.215/winxp、safari 4.03 winxp 中测试。结果是一致的。
标签: java ajax tomcat servlets character-encoding