0

如何在不遇到mojibake的情况下以 HTML 形式上传文件?

我有一个包含三个字段的表单:

  1. 文件字段
  2. 必需的文本字段
  3. 接受日文字符的文本字段

我已经使用属性设置了我的 HTML 表单enctype='multipart/form-data'。但是,当由于缺少必填字段而导致表单提交失败时,我会被重定向到同一页面,但我的第二个文本字段(接受日本字符的那个)已经被 mojibaked。

但是,如果我删除enctype或将其更改为其他任何内容,并且当表单提交失败时,我会看到日文字符(没有 mojibake)。问题是,如果成功,我将无法读取上传的文件。

任何想法如何解决这一问题??

4

2 回答 2

1

Mojibake(日文字符显示错误)可能有两个原因:

  1. 页面上的数据采用正确的字符编码,但浏览器无法识别。

  2. 页面上的某些字符使用了错误的编码(服务器以错误的编码写入它们)。

如果页面上的其他字符(在您的表单之外)正确显示,则您在服务器上产生了损坏的输出。

如果一切都被破坏了,并且您可以通过从浏览器的菜单中手动设置不同的编码来修复它,那么页面编码没有正确指定。

您使用哪种内容类型的标头和 HTML 元标记?

于 2009-04-01T04:38:11.380 回答
1

我已经弄清楚了(通过反向工程 appfuse (appfuse.org) 似乎不受 mojibake 及其文件上传表单的影响)。

它通过在服务器端将字符集编码设置为 UTF-8 来解决这个问题(使用 spring 的 org.springframework.web.filter.CharacterEncodingFilter )。因此,我猜 multipart-/form-data 确实搞砸了字符编码(或至少对于 java )。

于 2009-04-01T12:29:42.327 回答