2011-05-31 251 views
2

嗨 我想用java讀取包含德文字符的網頁內容,不幸的是,德文字符顯示爲奇怪的字符。 任何幫助,請 這裏是我的代碼:閱讀網頁內容

String link = "some german link"; 

      URL url = new URL(link); 
      BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream())); 
      String inputLine; 
      while ((inputLine = in.readLine()) != null) { 
       System.out.println(inputLine); 
      } 
+0

這聽起來就像是由於字符集,你可以提供的InputStreamReader()。什麼字符不可顯示? – 2011-05-31 14:16:39

+0

爲什麼不使用jsoup來代替? – Sorter 2013-11-07 05:39:09

回答

2

您必須設置正確的編碼。您可以在HTTP頭中的編碼:

Content-Type: text/html; charset=ISO-8859-1 

這可以在(X)HTML文檔中被覆蓋,見HTML Character encodings

我可以想像,你必須要考慮到標準桿一許多不同的其他問題網頁錯誤免費。但是Java有不同的HTTP客戶端庫可用,例如org.apache.httpcomponents。該代碼將是這樣的:

DefaultHttpClient httpclient = new DefaultHttpClient(); 
HttpGet httpGet = new HttpGet("http://www.spiegel.de"); 

try 
{ 
    HttpResponse response = httpclient.execute(httpGet); 
    HttpEntity entity = response.getEntity(); 
    if (entity != null) 
    { 
    System.out.println(EntityUtils.toString(entity)); 
    } 
} 
catch (ClientProtocolException e) {e.printStackTrace();} 
catch (IOException e) {e.printStackTrace();} 

這是Maven構件:

<dependency> 
    <groupId>org.apache.httpcomponents</groupId> 
    <artifactId>httpclient</artifactId> 
    <version>4.1.1</version> 
    <type>jar</type> 
    <scope>compile</scope> 
</dependency> 
+0

我剛剛將閱讀器的編碼更改爲ISO-8859-1,一切都以完美的方式進行。 感謝: ) – 2011-05-31 14:42:58

6

您需要指定字符爲您的InputStreamReader設置,像

InputStreamReader(url.openStream(), "UTF-8") 
+1

這可能會起作用,但您必須考慮並非所有的Web服務器都以UTF8格式傳送其內容。你必須處理幾個頭信息(HTTP:內容類型,HTML:內容類型,編碼或字符集) – Thor 2011-05-31 14:31:05

0

嘗試設置的字符集。

new BufferedReader(new InputStreamReader(url.openStream(), Charset.forName("UTF-8"))); 
0

首先,驗證您使用的字體是否可以支持您要顯示的特定德語字符。許多字體並不包含所有字符,當它是一個簡單的「缺失字符」問題時,尋找其他原因是一個很大的麻煩。

如果這不是問題,那麼無論是輸入還是輸出都是錯誤的字符集。字符集決定表示字符的數字如何映射到字形(或表示字符的圖片)。 Java通常在內部使用UTF-8;所以輸出流可能不是問題。檢查輸入流。