在myeclipse中建立java项目,目的看看我那个爬虫乱麻现象的原因; 在数据库中找到乱麻的数据项,然后再ie中输入其url,发现网页的编码是utf-8的格式 bot包中http类有个getbody方法,作用是得到当前网页的源文件,http类通过send方法发送请求,看看下http类的原代码,发现getbody有个重载函数,参数为编码格式。之后输出getbody("utf-8")发现乱麻问题解决。 实际上这个问题属于java内部编码问题,比如下端代码 URL url=new URL(http://www.yahoo.cn); //此网页由utf-8的网页
URLConnection con=url.openconnection(); con.connection(); InputStream in=con.getInputStream(); InputStreamReader isr=new InputStreamReader(in); BufferedReader br=new BufferReader(isr); String temp=null; while(null!=(temp=br.readline()))...{ System.out.println(temp); }
这样中文就显示乱麻,如果被打开的网页编码是gb2312的时候,上断程序就能正常显示中文。 现在我们来解决为什么能这样。先来看InputStreamReader的构造函数
可以发现,我们使用的是第一个构造函数,它使用的是缺省的字符集,从来面的例子可以看出,缺省的字符集应该是unicode-16的,所以在读取utf-8的网页时会发生乱码。我们可以使用第4个构造函数。来指定采用字符即得名字。把上面的改称inputstreamReader isr=new inputStreamReader(in,"utf-8");这样在处理utf-8网页的时候就不乱码了。如果进一步的话可以用正则表达式来获取网页中charset, Pattern p=Pattern.compile("charset\\s*=\\s*([^\"]+)"); m.group(1)就是目标网页的编码方式。temp为html的源代码 这样便可以不用自己来判断了。 |
|