2011-06-09 16 views
5

這是這個問題的延續:Java Jersey: Receive form parameter as byte array如何讓IE發佈UTF-8中的FORM數據?

即使包含頁面使用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) 
{ 
    ... 
} 

當然,如果我改變整個頁面編碼爲UTF-8,一切工作正常,問題是,我動態添加的形式可能使用不同的現有頁面編碼(在其他作品中,我不能篡改頁面編碼)。

我有解決方案適用於FF但不適用於IE。如果我將accept-charset="utf-8"屬性添加到發佈數據的FORM,FF無論包含頁面編碼都使用utf-8正確編碼所有發佈的數據,但這在IE中不起作用。

任何想法? 謝謝!

+0

不能傷害提到,這是這個問題的延續:http://stackoverflow.com/questions/6282626/java-jersey-receive-form-parameter-as-byte-array – MatrixFrog 2011-06-09 22:43:34

+0

其實你可能想要用html,跨瀏覽器和IE等標籤重新標記這一點。在這一點上,您使用JAX-RS/Jersey的事實並不重要。重要的是你的服務器期望UTF-8,但IE正在給它ISO-8859-1。所以在這一點上,這是一個瀏覽器問題,我看到它的方式。 – MatrixFrog 2011-06-10 01:14:42

+0

謝謝,你說得對。編輯! – 2011-06-10 08:12:00

回答

3

Ruby on Rails應用使用這一招:他們在一個隱藏字段添加不能強迫ISO拉丁語的UTF-8字符1.

他們使用的字段

<input name="utf8" type="hidden" value="&#x2713;" /> 

,它作爲

search?param1=foo&param2=bar&utf8=✓ 

歷史記查詢參數中結束了:utf8=✓之前,Ruby on Rails的使用花哨的雪人強制UTF-8:http://intertwingly.net/blog/2010/07/29/Rails-and-Snowmen