日期:2014-05-20  浏览次数:20744 次

java读取网页保存之后都是乱码
我用java读取一个网站的源码,但是获取到的源码都是乱码,由于事先不清楚网站的URL也就是说不清楚网站的编码,所以下面的建议不要和我说。
Java code

URL url = new URL(baseUrl);
BufferedReader buff = new BufferedReader(new InputStreamReader(url.openStream()), charSet);
StringBuilder sb = new StringBuilder();
String s;
while((s = buff.readLine()) != null){
  sb.append(s);
}
return sb.toString();



上面的代码我相信大家都知道,但是正如我上面所说,我不知道人家要访问什么网站,所以固定的字符集是不可能的!有些网站是utf-8编码、有的是GB2312/GBK编码、有些还是BIG5编码。我该怎么处理?

------解决方案--------------------
Java code

URL url =  new URL("http://www.baidu.com");
        BufferedReader buff  = new BufferedReader(new InputStreamReader(url.openStream()));
        StringBuilder sb = new StringBuilder();
        String s = null;
            while((s = buff.readLine()) != null){
              sb.append(s+"\n");
            }
        System.out.println(sb);

------解决方案--------------------
应该用:
URLConnection cn = url.openConnection();

然后在从头信息中获取其字符集设置:
cn.getContentEncoding();
------解决方案--------------------
探讨

应该用:
URLConnection cn = url.openConnection();

然后在从头信息中获取其字符集设置:
cn.getContentEncoding();

------解决方案--------------------
探讨

引用:

Java code

URL url = new URL("http://www.baidu.com");
BufferedReader buff = new BufferedReader(new InputStreamReader(url.openStream()));
StringBuilder sb = new StringBuilder();
……

------解决方案--------------------
哦,很多网站不直接写这个 HTTP-HEAD 信息,看来你只能用另一个函数了,然后再自己解析:

System.out.println(conn.getContentType());

输出:
text/html;charset=gbk

你要自己拆解下。。。