2015-12-18 85 views
1

我想下載許多網頁的源代碼,然後寫入該文件並在NetBeans控制檯中打印出來。我遇到了編碼問題。首先檢查我的代碼了:Java獲取正確編碼的URL

public static final void foo(URL url, Charset endoding, String file) { 
    BufferedReader in; 
    String readLine; 
    try 
    { 
     in = new BufferedReader(new InputStreamReader(url.openStream(), encoding)); 
     BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file) , encoding)); 
     while ((readLine = in.readLine()) != null) { 
      System.out.println(readLine+"\n"); 
      out.write(readLine+"\n"); 
     } 
     out.flush(); 
     out.close(); 
    } 
} 

我2個國外網站(前捷克和泰國)

我試圖Charset.forName測試這個(「UTF-8」),似乎正常工作的泰國的網頁,但實際上爲捷克的網頁沒有。控制檯和文件包含諸如question的問號。

我也曾嘗試ISO-8859-2,即正確保存的文件,但控制檯顯示小矩形而非字母Z,š等。

確實存在多語言網站的任何通用的解決方案(如捷克,日本,泰國和更多..),我可以保存到正確的文件一樣打印控制檯或保存到變量?

回答

0

問題是沒有終極編碼這樣的東西。當前編碼技術的狀態可能是UTF-8,儘管每一方都可以自己決定使用哪種編碼。 Here是一篇相當不錯的文章,值得一讀,它描述了char編碼作爲世界範圍解決方案的基本問題。

因此,最好的辦法是用InputStreamReader.getEncoding()得到html頁面編碼:

public static final void foo(URL url, String file){ 
    BufferedReader in; 
    String readLine; 
    try{ 
    InputStreamReader isr = new InputStreamReader(url.openStream()); 
    String encoding = isr.getEncoding(); //if you actually need it, which I don't suppose 
    in = new BufferedReader(isr); 
    BufferedWriter out = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file) , encoding)); 
    while ((readLine = in.readLine()) != null) { 
     System.out.println(readLine+"\n"); 
     out.write(readLine+"\n"); 
    } 
    out.flush(); 
    out.close(); 
    } 
} 

如預期這應該工作。

+0

我很抱歉...網站的編碼說UTF-8不起作用..與問號和正方形而不是適當的字符問題仍然存在。 –

+0

恩,好吧,我真的不知道該怎麼辦。你能給我你的網站Urlacher失敗嗎? – GamerGurke15