这是此问题的延续:Java Jersey: Receive form parameter as byte array
即使包含页面使用ISO-8859-1字符集,我也需要以UTF-8格式发布表单数据。我找到了FF的解决方案,但不是IE。 以下是整个故事:
我使用Jersey REST网络服务接收从简单的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)
{
...
}
当然如果我将整个页面编码更改为UTF-8,一切正常,问题是我将表单动态添加到可能使用不同编码的现有页面(在其他工作中我不能篡改页面编码)
我的解决方案适用于FF但不适用于IE。如果我将accept-charset="utf-8"
属性添加到发布数据的FORM,则无论是否包含页面编码,FF都会使用utf-8正确编码所有发布的数据,但这在IE中不起作用。
有什么想法吗? 谢谢!
答案 0 :(得分:3)
Ruby on rails应用程序使用这个技巧:它们在隐藏字段中添加一个UTF-8字符,该字符无法强制转换为ISO Latin 1。
他们使用的字段是
<input name="utf8" type="hidden" value="✓" />
并以查询参数
结束search?param1=foo¶m2=bar&utf8=✓
历史记录:在utf8=✓
之前,Ruby on rails使用了一个奇特的雪人强制使用UTF-8:http://intertwingly.net/blog/2010/07/29/Rails-and-Snowmen。