2017-03-07 53 views
1

我正在使用以下方法從HTTP服務器讀取txt文件。轉換爲UTF-8

public static String getHtmlFromUrl(String strUrl, String referer, boolean isMobile) { 
    URL url = null; 
    BufferedReader reader = null; 
    StringBuilder sb = null; 
    String returnValue = ""; 

    try { 
     url = new URL(strUrl); 
     URLConnection con = url.openConnection(); 

     // force server to mimic specific Browser 
     con.setRequestProperty("User-Agent", userAgent); 
     if(isMobile) 
      con.setRequestProperty("User-Agent", userAgentMobile); 

     con.setRequestProperty("Referer", referer); 

     con.setReadTimeout(15000); 
     con.connect(); 

     reader = new BufferedReader(new InputStreamReader(con.getInputStream())); 
     sb = new StringBuilder(); 

     String line = null; 
     while((line = reader.readLine()) != null) { 
      sb.append(line + "\n"); 
     } 
     returnValue = sb.toString(); 
    } catch(Exception e) { 
     e.printStackTrace(); 
    } finally { 
     if(reader != null) { 
      try { 
       reader.close(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
     } 
    } 
    return returnValue; 
} 

我沒有直接訪問此文件(所以我不能改變它的方式)。如果我在瀏覽器中調用URL,它將使用ISO-8859或Windows-1252編碼正確顯示。

Android似乎默認將它解釋爲utf-8。所以我需要一種方法將returnValueStringBuffer sb從現有的ISO-8859編碼轉換爲utf-8。

我該怎麼做?

+0

'new InputStreamReader(con.getInputStream(),「UTF-8」)'是一種定義輸入編碼的方法。看看文檔:http://docs.oracle.com/javase/7/docs/api/java/io/InputStreamReader.html – Nico

回答

2

必須更新該行:

reader = new BufferedReader(new InputStreamReader(con.getInputStream())); 

需求是:

reader = new BufferedReader(new InputStreamReader(url.getInputStream(), "ISO_8859_1")); 

或自從Java 7:

reader = new BufferedReader(new InputStreamReader(url.getInputStream(), StandardCharsets.ISO_8859_1)); 

UPDATE: ISO_8859_1到位UTF-8

+0

這(當然)不起作用,因爲文本是在ISO- 8859。但提示很棒。如果你更新你的答案,我會接受它。 'reader = new BufferedReader(new InputStreamReader(url.getInputStream(),StandardCharsets.ISO_8859_1));' – devnull69

+0

我怎麼錯過了....對不起這部分。我已經更新,因爲你建議 –

+0

不完全...似乎一些複製/粘貼問題仍然存在:-) – devnull69