【发布时间】:2011-07-14 06:20:46
【问题描述】:
当我在表单中包含文件输入时,表单元素的输入编码被弄乱了。我正在使用 jquery 和 servlet 后端(和 ajax 调用),但我不明白这应该与它有什么关系。 HTML 页面编码设置为 UTF-8,我指定 servlet 请求的字符编码也使用 utf8。当我从表单中删除文件输入时,编码就可以了。
当我调查请求的标头时,我在 firebug 中看到以下有效负载:
...
------WebKitFormBoundaryMxjJWBwBmPLxN623
Content-Disposition: form-data; name="createActivityTitleInputId"
æøåæøåæøåæøå
...
输入的内容应该是æøåæøåæøå,不知道webkitformboundary的东西是什么……?
如果有人能帮我解决这个问题,我将不胜感激。
谢谢:)
----- 编辑------
所以我做了一个小测试项目来尝试缩小问题的范围。当我不使用 ajax 发布表单时,一切正常。但是,如果我使用 jQuery 表单插件提交表单,则编码失败...
form.ajaxSubmit({
dataType: 'json',
data: data,
type: 'POST',
success: function(response) {
successfunction(response);
}
});
有人使用过这个插件吗?
【问题讨论】:
-
可能是个愚蠢的问题,但您的
<form>enctype设置为? -
没关系,我在问题中看到了
form-data。 -
你用什么来解析
multipart/form-data请求? Apache Commons FileUpload,我猜?边界的东西只是 RFC2388 的一部分,对我来说看起来不错。提交的输入显然错误地编码为 ISO-8859-1 而不是 UTF-8。然而,尚不清楚是客户端错误地执行了此操作(尝试不同的浏览器),还是只是您自己将提取的 UTF-8 字符打印到错误使用 ISO-8859-1 的某些输出中。
标签: jquery servlets encoding file-upload