2013-10-15 38 views
3

我們能的API在指定的與application/x-www-form-urlencoded內容類型POST請求參數的字符編碼(例如RESTful Web服務),如果「是」,如何?對於參數在應用程序/ x-WWW窗體-urlencoded POST在API請求(沒有形成)字符編碼

的參數將被編碼,根據該算法在此指定:URL-encoded form data

之前的字符串可以是百分比編碼(其上字節進行操作),它們需要被表示爲代碼單元與特定字符流編碼爲

對於形式,這個字符編碼可以通過從服務器發送的屬性表格通過在表單數據設置一個隱藏_charset_條目或accept-charset屬性確定,例如。

然而,由於API請求不具有對應表格,我們不能推斷出被接受的字符編碼/服務器需要的話。

看來,唯一合理的編碼是UTF-8。當沒有這種字符編碼可以從窗體中確定時,這是默認編碼。

Related question),(但沒有重複的)

+0

的可能重複[請幫我跟蹤字符集是如何處理的每一步(http://stackoverflow.com/questions/1542107/please-help-me-trace-how -charsets-handling-every-step-of-the-way) –

+0

@PaulSweatte對不起,這不是對上述問題的回答。上述問題與應用於參數字符串的*字符編碼*有關,以便創建一個可以*百分比編碼的字節流,以便與內容類型爲application/x-www-form的實體一起使用-urlencoded'。問題是,有關字符編碼類型的信息將在最終編碼的字節流中丟失,並且無法告訴接收方它是什麼。 – CouchDeveloper

+0

難道你不能只使用自定義的請求頭告訴接收機它是什麼? –

回答

1

使用之一以下解決方案:

+0

帶有「multipart/form-data」消息的HTTP消息,其中每個參數將被表示爲一個單獨的部分,讓我們確實指定MIME實體的內容類型和(可能)編碼(即每個參數值) 。儘管答案很有用,但我仍在尋找諸如「你不能因爲......」或「如果使用UTF-8字符編碼......」而不用擔心的答案,或者「這取決於服務器...「或」通常,服務器將採用UTF-8,但是...「;) – CouchDeveloper

0

不幸的是,當sendi瀏覽器仍然非常愚蠢ng數據。這是JavaEE 5相關的問題,現在依然如此 - 您可以檢查瀏覽器的表單提交數據,並且您將看到它不包含任何字符集編碼信息!

閱讀https://docs.oracle.com/cd/E19316-01/819-3669/bnayd/index.html

由於這個原因,解碼錶單數據的服務器部分在大多數情況下必須神奇地知道編碼。簡單的解決方案是如果不需要UTF-8,則指定accept-charset = iso-8859-1。否則,指定accept-charset = utf-8並確保解碼錶單數據的服務器部分默認採用utf-8 .....我想知道爲瀏覽器的請求添加字符集編碼參數是多麼困難,必須指定它 - ffs。這可能是我見過的最愚蠢的事情。

又見HttpServletRequest - setCharacterEncoding seems to do nothing

相關問題