如何让IE发布UTF-8的FORM数据?

Dim*_* L. 5 browser post encoding internet-explorer character-encoding

这是这个问题的延续:Java Jersey:接收表单参数作为字节数组

即使包含页面使用ISO-8859-1字符集,我也需要以UTF-8发布表单数据.我找到了FF的解决方案,但不是IE.以下是整个故事:

我使用Jersey REST Web服务来接收从简单的html <FORM>发布的数据.当页面使用UTF-8字符集时,发布的数据也使用UTF-8编码,一切正常.但是当页面使用ISO-8859-1字符集时,FORM数据也会使用ISO-8859-1发布,而Jersey在使用特殊字符时会遇到问题(可能是因为它希望数据以UTF-8格式出现).

泽西方法看起来像这样:

@Path("/someMethod")
@POST
@Produces(MediaType.TEXT_HTML)
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public String someMethod(@FormParam("someParam") String someParam)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

当然,如果我将整个页面编码更改为UTF-8,一切正常,问题是我将表单动态添加到可能使用不同编码的现有页面(在其他工作中我不能篡改页面编码).

我有解决方案适用于FF但不适用于IE.如果我向accept-charset="utf-8"发布数据的FORM 添加属性,则无论是否包含页面编码,FF都会使用utf-8正确编码所有发布的数据,但这在IE中不起作用.

有任何想法吗?谢谢!

gio*_*ele 3

Ruby on Rails 应用程序使用此技巧:它们在隐藏字段中添加一个无法强制转换为 ISO Latin 1 的 UTF-8 字符。

\n\n

他们使用的字段是

\n\n
<input name="utf8" type="hidden" value="&#x2713;" />\n
Run Code Online (Sandbox Code Playgroud)\n\n

它最终出现在查询参数中

\n\n
search?param1=foo&param2=bar&utf8=\xe2\x9c\x93\n
Run Code Online (Sandbox Code Playgroud)\n\n

历史记录:之前utf8=\xe2\x9c\x93,Ruby on Rails 使用了一个奇特的雪人来强制使用 UTF-8:http://intertwingly.net/blog/2010/07/29/Rails-and-Snowmen

\n