utf8网页的问题

在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的构造函数

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的源代码

这样便可以不用自己来判断了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值