在myeclipse中建立java项目,目的看看我那个爬虫乱麻现象的原因;
在数据库中找到乱麻的数据项,然后再ie中输入其url,发现网页的编码是utf-8的格式
bot包中http类有个getbody方法,作用是得到当前网页的源文件,http类通过send方法发送请求,看看下http类的原代码,发现getbody有个重载函数,参数为编码格式。之后输出getbody("utf-8")发现乱麻问题解决。
实际上这个问题属于java内部编码问题,比如下端代码





















这样中文就显示乱麻,如果被打开的网页编码是gb2312的时候,上断程序就能正常显示中文。
现在我们来解决为什么能这样。先来看InputStreamReader的构造函数
InputStreamReader(InputStream in) 创建一个使用默认字符集的 InputStreamReader。 |
InputStreamReader(InputStream in, Charset cs) 创建使用给定字符集的 InputStreamReader。 |
InputStreamReader(InputStream in, CharsetDecoder dec) 创建使用给定字符集解码器的 InputStreamReader。 |
InputStreamReader(InputStream in, String charsetName) 创建使用指定字符集的 InputStreamReader。 |
可以发现,我们使用的是第一个构造函数,它使用的是缺省的字符集,从来面的例子可以看出,缺省的字符集应该是unicode-16的,所以在读取utf-8的网页时会发生乱码。我们可以使用第4个构造函数。来指定采用字符即得名字。把上面的改称inputstreamReader isr=new inputStreamReader(in,"utf-8");这样在处理utf-8网页的时候就不乱码了。如果进一步的话可以用正则表达式来获取网页中charset,
Pattern p=Pattern.compile("charset//s*=//s*([^/"]+)");
Matcher m=p.matcher(new String(temp));
m.group(1)就是目标网页的编码方式。temp为html的源代码
这样便可以不用自己来判断了。