2010-06-23 129 views
0

嗨!我有一個編碼爲ISO-8859-2的網頁內容。如何將在此字符集中編碼的流轉換爲java的UTF-8。我正在嘗試下面的代碼,但它不起作用。它弄亂了一些人物。有沒有其他方法可以做到這一點?如何在android中設置字符串字符編碼

BufferedInputStream inp = new BufferedInputStream(in); 
    byte[] buffer = new byte[8192]; 
    int len1 = 0; 
    try{ 
     while ((len1 = inp.read(buffer)) != -1) 
     { 

      String buff = new String(buffer,0,len1,"ISO-8859-2"); 
      stranica.append(buff); 
     } 
+0

你應該重新標記這個「Java」而不是「Android」 – mtmurdock 2010-06-23 00:48:49

回答

4

與InputStreamReader和字符集試試看:

InputStreamReader inp = new InputStreamReader(in, Charset.forName("ISO-8859-2")); 
BufferedReader rd = new BufferedReader(inp); 
String l; 
while ((l = rd.readLine()) != null) { 
    ... 
} 

如果你得到一個UnsupportedCharsetException,你知道什麼是你的問題......此外,與inp.getEncoding()您可以檢查哪些編碼被真正使用。

+0

謝謝,我會在今天晚些時候嘗試這個...... – Levara 2010-06-23 11:35:16

+0

看來問題是編碼參數應該是「ISO8859-2」而不是「 ISO-8859-2「... – Levara 2010-06-24 00:50:04

+0

我懷疑這一點。 「ISO-8859-2」和「ISO8859-2」都是該編碼的有效名稱,Java可以識別它們。 – 2010-06-24 03:01:32

3

如何 此charset編碼的流轉換爲Java的UTF-8

錯誤的假設:java使用UTF-16內部,而不是UTF-8。

但是你的代碼實際上看起來是正確的,應該工作。你確定網頁實際上是用ISO-8859-2編碼的嗎?也許它的編碼被錯誤地聲明。

或者真正的問題不在於您已經顯示的閱讀代碼,而是您用來處理結果的任何代碼。這些「混亂的字符」如何以及在哪裏出現?

+0

我知道關於utf-16,但是當一個網頁有它的頭部(或者叫做什麼)時,utf-8聲明,完美的作品。當宣佈ISO-8859-2時,某些克羅地亞字符(Č,ć,š,ć,đ,ž)最終顯示爲?。 – Levara 2010-06-23 11:33:50

+0

@Levara:當您在瀏覽器中打開這些網頁時,這些網頁看起來是否正確?如果顯示'?'那麼看起來好像網頁內容被任何程序產生的內容破壞了。在這一點上你所做的任何事都不能解決這個問題 – 2010-06-23 11:43:46

+0

是的。它們在瀏覽器中正確顯示。這就是爲什麼我確信這是可能的,我只是不知道該怎麼做。 :) – Levara 2010-06-23 12:40:52