求助:采用java抓取网页,总是出现乱码,请大侠指点迷津,谢谢

dataat 2013-05-24 12:23:18
如题,相关java源程序附在后面,怎么调试也是出现乱码,恳请大牛指点,谢谢了。
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.URL;
import java.net.URLConnection;

public class DownPage {
public static void main(String args[]) throws IOException{

//抓取的页面地址
String urlStr = "http://esf.zz.soufun.com/house/a21-i32/";
URL url = new URL(urlStr);
URLConnection connection = url.openConnection();

//获得该网页的编码
String ss = connection.getContentType();
System.out.println(ss.substring(ss.indexOf("=")+1));

//查InputStreamReader的构造方法,gb2312为该页面的编码
BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream(),ss.substring(ss.indexOf("=")+1)));
File file = new File("d:/a.html");
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file)));
if(br != null){
String s = null;
while((s = br.readLine())!=null){
String sss = new String(s.getBytes("gb2312"),"windows-31J");
System.out.println(s);
System.out.println(sss);
bw.write(s);
bw.flush();
}
bw.close();
br.close();
}
}
}
...全文
111 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
dataat 2013-05-24
  • 打赏
  • 举报
回复
谢谢您的回复。 其实上面已经从网页当中获取了该网页的编码了。 System.out.println(ss.substring(ss.indexOf("=")+1)); 就是打印输出了网页编码格式。 实际上面的网页编码是gb2312,但是我实验了gbk,gb2312,utf8等等,都是乱码,用网页打开就是好的
失落夏天 2013-05-24
  • 打赏
  • 举报
回复
我也经常网上抓取网页。 你抓网页的前提是知道网页什么格式编码,然后你用这种格式去读才对啊。 String sss = new String(s.getBytes("gb2312"),"windows-31J"); 那个window-31J是一种新的编码格式么?没用过 下面是我写的一个工具类。实现读页面的功能

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.net.URL;

public class URLHelper {

	// 获得html模板
	public static String getHtml(String urlpath) {
			StringBuffer sb = new StringBuffer();
			try {
				URL url = new URL(urlpath);
				BufferedReader br = new BufferedReader(new InputStreamReader(
						url.openStream()));
				String s = null;
				while ((s = br.readLine()) != null) {
					sb.append(s);
				}
				br.close();
			} catch (Exception e) {
				e.printStackTrace();
			}
			return sb.toString();
		}

}
oh_Maxy 版主 2013-05-24
  • 打赏
  • 举报
回复
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file),"UTF-8")); 中文字符乱码,是和页面的编码格式有关的,这里的UTF-8不行,就换GBK等,调试下吧。那个sss的处理可以注释掉了。
  • 打赏
  • 举报
回复
网页采用gzip技术压缩了。 System.out.println( connection.getContentEncoding()); 自己看下。所以普通转码是没用的,网上有好多读取gzip的例子,自己卡看吧

50,526

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧