2017-08-02 78 views
0

我嘗試從URL中讀取html內容。當我不想將內容打印到控制檯的「Umlaute」中時,就像ä,ö,ü顯示錯誤。來自URL的Java InputStreamReader不編碼「Umlaute」

URL url = new URL("http://www.lauftreff.de/laeufe/halbmarathon-1-2017.html"); 
URLConnection conn = url.openConnection(); 
InputStreamReader input = new InputStreamReader(conn.getInputStream(),StandardCharsets.ISO_8859_1); 
BufferedReader bi = new BufferedReader(input); 
String inputLine; 
while((inputLine = bi.readLine()) != null){ 
    System.out.println(inputLine); 
} 

在html的標題中,charset的信息是ISO_8859_1。 UTF-8也不起作用。 有沒有人想法該怎麼做?

+1

您的控制檯不支持UTF-8或ISO_8859_1? – Jens

+0

你正在得到正確的結果。但是,「ä」表示爲「ä」。 – saka1029

回答

0

在網站中,Umlaute被解碼爲HTML實體。所以你需要解碼這些。下面的代碼應該可以工作,但是沒有經過測試。

URL url = new URL("http://www.lauftreff.de/laeufe/halbmarathon-1-2017.html"); 
URLConnection conn = url.openConnection(); 
InputStreamReader input = new InputStreamReader(conn.getInputStream(),StandardCharsets.ISO_8859_1); 
BufferedReader bi = new BufferedReader(input); 
String inputLine; 
while((inputLine = bi.readLine()) != null){ 
    inputLine = StringEscapeUtils.unescapeHtml4(inputLine); 
    System.out.println(inputLine); 
} 
+0

是的,那正是我也注意到的。 –

+1

您應該提及'StringEscapeUtils'來自哪裏:它不是JDK的一部分。 –

+0

謝謝!添加lang3到maven依賴項! – Sigma