2015-12-18 123 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