2011-05-11 71 views
1

我正試圖解決Android應用程序中的問題。該應用向Web服務發佈HTTP請求。當請求中的文本包含瑞典字符Å,Å和Ö時,它不起作用。擁有Web服務的人說,這是因爲請求必須以UTF-8編碼,並且他們說這不是。如何知道我的HTTP請求是否使用UTF-8?

該應用程序使用org.apache.http.impl.client.DefaultHttpClient,並且我假設這一行說應該使用UTF-8:HttpProtocolParams.setContentCharset(params,「UTF-8」);

我用Wireshark來看到該應用發送的內容,和字符串 「TeståäöÅÄÖéüà」 被示出爲: 「測試\ 345 \ 344 \ 366 \ 305 \ 304 \ 326 \ 351 \ 374 \ 340」

我發現by this table這些數字是字符的「Unicode代碼點」的八進制表示。這是UTF-8以外的東西,對吧?

是這樣的,如果它是UTF-8,那麼特殊字符將由兩個字節表示,例如, 「å」的「c3 a5」和「ä」的「c3 a4」?

因此:
1.我對Unicode和UTF-8的理解是否正確?
2.我是否正確地發送了什麼不是UTF-8編碼?
3.如何使DefaultHttpClient以UTF-8發送?

喬恩

+2

你是在請求URL(例如'查詢'部分)還是請求正文中談論UTF-8? – 2011-05-11 12:11:54

+0

我想在身體。我怎麼知道? – prograde 2011-05-11 14:32:19

回答

2

正如由Stephen指出的那樣,則必須在HTTP報頭(用於URL)所使用的編碼和請求主體之間進行區分。

無論如何,區別不在Unicode與UTF-8之間,UTF-8是UNICODE的字符集編碼之一(UTF-16是另一種)。

而且您並未使用Unicode,而是使用舊的Latin1(ISO 8859-1):每個字符一個字節。恰巧,前128個Unicode碼點與Latin1使用的位置大致相符。

幫你一個忙,read the basics about Unicode,它應該需要你一兩天的時間,對於今天(和明天)的任何程序員來說,這都是非常有價值和必要的知識。

+0

在HTTP POST中,我發佈的內容會放在主體中,對吧?如果我沒有誤解:) – prograde 2011-05-11 14:35:06

+0

是的,你是對的 – leonbloy 2011-05-11 14:36:46

+0

謝謝,很高興知道它是ISO 8859-1! 今天我已經閱讀了關於Unicode幾個小時,但我仍然很困惑,但我明白,UTF-8是Unicode編碼的許多方法之一,所以我承認我不小心表達了它:) 但是,我是否正確,如果它是UTF-8編碼,我會在日誌中看到「c3 a5」爲「å」? 而我該如何使它在java中編碼UTF-8? HttpProtocolParams.setContentCharset(params,「UTF-8」)做了什麼? – prograde 2011-05-11 14:43:48

相關問題