首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

抓取网页遇见奇怪的乱码有关问题,查过很多资料都没有答案

2014-01-12 
抓取网页遇见奇怪的乱码问题,查过很多资料都没有答案需要强调的一点是我用的抓取程序以前正常抓去过不少中

抓取网页遇见奇怪的乱码问题,查过很多资料都没有答案

    需要强调的一点是我用的抓取程序以前正常抓去过不少中英文网页,类似这样的乱码还是第一次碰上,用程序抓取到乱码的网页在浏览器,以及用httpfox、httprequester等插件中都能够正确的显示,所以猜测浏览器和这些插件对返回的源码进行了解码之类的操作,当然这仅仅是猜测而已。我抓取的是中文页面,程序中使用了GBK编码(与页面源代码的编码格式一致),但程序返回的乱码从表面看比较奇怪,不像是ISO-8859-1,UTF-8,GB2312,GBK等造成的乱码,但是也把几种常见的编码格式都试了还是不行。
    比较奇怪的一点是,该网站下有的页面可以正常的抓取,有的页面却会出现乱码,最奇怪的是同一个网页链接,有的时候是可以正常抓取的,但可能仅仅过了十几秒钟,再抓取该链接就出现乱码了,可能过一会又好了。反正就跟抽风一样。实在是找不到原因,请求各大神指点迷津。解决问题就给分!
    以下是使用GET方法请求网页的主要代码(try-catch什么的太占空间,没有放进去):


String reqUrl = "http://www.....";// 请求的网页网址(省略)
URL url = new URL(reqUrl);
HttpURLConnection url_conn = (HttpURLConnection)url.openConnection();
url_conn.setRequestMethod("GET");
url_conn.setConnectTimeout(HttpRequestProxy.connectTimeOut);//设置连接超时
url_conn.setReadTimeout(HttpRequestProxy.readTimeOut);//设置读取超时

InputStream in = url_conn.getInputStream();
BufferedReader br = new BufferedReader(new InputStreamReader(in, "GBK"));
String tempLine = br.readLine();

StringBuffer temp = new StringBuffer();
while(tempLine != null){
temp.append(tempLine + "\n");
tempLine = br.readLine();
}
String responseContent = temp.toString();// 这就是返回的乱码字符串
br.close();
in.close();

网页抓取 乱码 java 中文乱码
[解决办法]
你可以查看下content-encoding 如果是gzip 说明 返回的内容是压缩过的
[解决办法]
PHP的频繁抓取也碰到过这种情况,不知道为什么。

热点排行