程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> 從http協議看無法獲取網頁charset的原因

從http協議看無法獲取網頁charset的原因

編輯:關於JAVA

原始問題如下:

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved