今天发现一个获取网页编码方面的问题,
代码如下:
public String getCharset(String weburl) throws IOException {
// 定义URL对象
URL url = new URL(weburl);
// 获取http连接对象
HttpURLConnection urlConnection = (HttpURLConnection) url.openConnection();
urlConnection.connect();
// 网页编码
String strencoding = null;
/**
* 首先根据header信息,判断页面编码
*/
// map存放的是header信息(url页面的头信息)
Map<String, List<String>> map = urlConnection.getHeaderFields();
Set<String> keys = map.keySet();
Iterator<String> iterator = keys.iterator();
// 遍历,查找字符编码
String key = null;
String tmp = null;
while (iterator.hasNext()) {
key = iterator.next();
tmp = map.get(key).toString().toLowerCase();
// 获取content-type charset
if (key != null && key.equals("Content-Type")) {
int m = tmp.indexOf("charset=");
if (m != -1) {
strencoding = tmp.substring(m + 8).replace("]", "");
return strencoding;
}
}
}
return null;
}
此时,如果网页中的源码为
<meta http-equiv="Content-Type" content="text/html;charset=gb2312">时,可以返回gb2312,但如果是
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">则返回为空。只是多了一个空格而已