有时我们抓取网页的内容时,出现乱码,我们可以使用两种方式,去解新这个问题。
一种是:
public static String clawer(String myurl) {
int i = 0;
StringBuffer sb = new StringBuffer("");
URL url;
try {
url = new URL(myurl);
BufferedReader br = new BufferedReader(new InputStreamReader(url.openStream(), "gbk"));
String s = "";
while ((s = br.readLine()) != null) {
i++;
sb.append(s + "\r\n");
}
} catch (Exception e) {
e.printStackTrace();
}
System.out.println(sb.toString());
return sb.toString();
}
里面写明是gbk,或utf-8,这个跟网页的编码方式有关,比如这个网页的头为以下方式的话,
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=GBK">
<title>当周办件情况一览表</title>
<link href='./css/default.css' rel='stylesheet' type='text/css'>
<LINK href='../images/mt_style.css' type='text/css' rel='stylesheet'>
<script language="javascript" src="../../Common/Calendar/Include/Calendar.js"></script>
<script language="javascript" src="../../Common/Include/approve.js"></script>
</head>
................................................
............................................
说明是使用GBK的编码方式。
方式二,在代码中一个一个去解析,这个不太方便。使用的时候没有第一种方式好。如下所示:
String str = new String(s.getBytes("ISO8859-1"),"UTF-8");
String name = new String(nameElement.text().getBytes("GBK"),"ISO8859-1");
System.out.println(name);
方式一用法比较好,方式二的情况要多次使用才行。