我想下载许多网页的来源,然后写入该文件并在NetBeans控制台中打印出来。我有编码问题。首先检查我的代码:
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”),它似乎在泰国网页上正常工作,但实际上捷克的网页却没有。控制台和文件包含问号,例如 。
我也尝试过正确保存文件的ISO-8859-2,但控制台显示小矩形而不是字母ž,š等。
对于多语言网站(如捷克语,日语,泰语等等)是否存在任何通用解决方案,我可以将其保存为与打印到控制台或保存到变量相同的正确文件?
答案 0 :(得分:1)
问题在于没有最终编码这样的东西。现有技术的编码当时可能是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();
}
}
这应该按预期工作。