2011-09-03 40 views
2

美好時光! 我的Adroid應用程序對Google的API服務之一執行HTTP請求。當然,它的工作原理是,當請求的參數是英文時,但是當我用西里爾文測試我的函數時 - 我得到了400錯誤。似乎是,問題是將Win-1251字符串編碼爲UTF-8?它如何在Java中完成?如何在Java中的HTTP請求中編碼西里爾符號?

回答

11

嘗試:

URLEncoder.encode(yourString, HTTP.UTF-8); 
+1

謝謝,反覆無常! –

+0

Deprecatad(UTF-8 – Artem

9

您應該使用URLEncoder#encode()來編碼請求參數。

String query = "name1=" + URLEncoder.encode(value1, "UTF-8") 
      + "&name2=" + URLEncoder.encode(value2, "UTF-8") 
      + "&name3=" + URLEncoder.encode(value3, "UTF-8"); 

String url = "http://example.com?" + query; 
// ... 

請注意,參數名實際上也應該是URL編碼的,但在這個特定的例子中,它們都已經有效。另外請注意,當您使用Android的內置HttpClient API時,您不需要這樣做。

+0

謝謝你的詳細信息,特別是關於Android的HttpClient –

2

Java中的所有對象String被編碼爲Unicode(UTF-16) 和Unicode包括從Windows-1251字符 集的字符。

例如,「Česká」是「\ u010Cesk \ u00E1」。

如果要使用不同的 字符集這個字符串發送給其他軟件,那麼你需要的字符串轉換爲字節 使用CharsetEncoder類,或使用OutputStreamWriter 類,以及將Charset該字符集。

如果您收到來自其他軟件中的字符串不同的字符集 然後使用類CharsetDecoderInputStreamReaderCharset將其轉換爲Unicode的備份。