原始問題如下:
http://topic.csdn.net/u/20080902/02/a6445aa1-2e6b-45c6-a47c-79009718c0fa.html
html網頁的內容大致如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<meta http-equiv="Content-Type;charset=gb2312" />
<title>CSDN首頁 </title>
...
</head>
<body>
.....
</html>
我使用以下語句抓取類似上面的網頁:
URL url = new URL("http://www.csdn.net");
HttpURLConnection connection = (HttpURLConnection)url.openConnection();
//建立連接後,使用下面兩句取得網頁的編碼格式
String contentType = connection.getHeaderField("Content-Type");
contentType = connection.getContentType();
無論是哪一句,得到的contentType的值都是text/html,而不包含後面的charset=gb2312,這是為什麼?
我注意到一個問題,content="text/html; charset=gb2312"這裡,在;和charset之間有一個空格,是否因為這個空格的緣故,而不能得到content-type的准確值
還有沒有其他的辦法可以得到頁面的編碼字符集?
回答:
connection.getContentType();
這個需要服務器設置了 ContentType才可以,這個數據在文件頭裡面,而不是在文件的主體(也就是你看到的html)裡面。
所以檢測頁面類型需要分3步,如果這一步不行,則用下一個
1 看header裡面的ContentType,也就是你用的那個方法
2 看 html 裡面的 ContentType ,也就是解析html頁面
3 對html數據進行自動評估,類似於it裡面的自動檢測編碼類型。
一段典型的返回信息的Header數據
HTTP/1.1 200 OK
Date: Mon, 01 Sep 2008 23:13:31 GMT
Server: Apache/2.2.4 (Win32) mod_jk/1.2.26
Vary: Host,Accept-Encoding
Set-Cookie: JAVA2000_STYLE_ID=1; Domain=www.java2000.net; Expires=Thu, 03-Nov-2011 09:00:10 GMT; Path=/
Content-Encoding: gzip
Transfer-Encoding: chunked
Content-Type: text/html;charset=UTF-8
<html>
。。。。從這裡開始是數據的本體
此文收藏於:http://www.java2000.net/p9226