C#獲取網頁源碼,自動判斷網頁字符集編碼[轉]

原文地址:C#獲取網頁源碼,自動判斷網頁字符集編碼[轉] 

最近開始打算重新學習C#,並且嘗試做點C#練習。而最讓我感興趣的還是和網站相關的東西。那就做個獲取網站源碼,採集文章的功能吧。

根據網上的資料,使用WebClient來獲取源碼,很容易就能得到網頁源碼。但是,發現,不同網站的網頁字符編碼就不一樣的,如何自動分別不同網站的字符編碼,而正確解釋網頁中的漢字呢。在C#裏,提供了豐富的工具類庫,可以輕鬆的轉碼。但是,卻發現不能自動獲取網站上的字符編碼而自動正確的解釋源碼,而導致漢字顯示亂碼。以前我也用JAVA做過這樣的功能,獲取網站源碼,同樣,在JAVA的各種獲取網站源碼的類庫裏,也不能自動根據網頁字符編碼自動正確解釋編碼,只能我們自己手動來做了。

我的解決辦法是先採用系統默認的編碼從stream裏得到源碼,再使用正則表達式獲取源碼中的[獲取網頁字符編碼描述信息],這個信息,一般來說,網頁裏都會有的,在網頁源碼的<head>裏,類似這樣的代碼:<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />(其實不一樣完全這樣,有些不規範的,沒有雙引號,或者最後面沒有/閉合,所以,正則表達式得考慮周全些),從這個代碼裏來獲取編碼信息,再判斷系統當前的默認編碼是否和這個一樣,如果不同,再使用網頁中取到的編碼來重新從stream裏解釋取得網頁源碼。

源碼如下:(下面這段代碼是一個完整的獲取網頁源碼,且自動正確解釋漢字)

方法一:

using System.Net;
using System.IO;
using System.Text.RegularExpressions;
private string getHtml(string url, string charSet)//url是要訪問的網站地址,charSet是目標網頁的編碼,如果傳入的是null或者"",那就自動分析網頁的編碼
{
WebClient myWebClient = new WebClient();//創建WebClient實例myWebClient
// 需要注意的:
//有的網頁可能下不下來,有種種原因比如需要cookie,編碼問題等等
//這是就要具體問題具體分析比如在頭部加入cookie
// webclient.Headers.Add("Cookie", cookie);
//這樣可能需要一些重載方法。根據需要寫就可以了

//獲取或設置用於對向 Internet 資源的請求進行身份驗證的網絡憑據。
myWebClient.Credentials = CredentialCache.DefaultCredentials;
//如果服務器要驗證用戶名,密碼
//NetworkCredential mycred = new NetworkCredential(struser, strpassword);
//myWebClient.Credentials = mycred;
//從資源下載數據並返回字節數組。(加@是因爲網址中間有"/"符號)
byte[] myDataBuffer = myWebClient.DownloadData(url);
string strWebData = Encoding.Default.GetString(myDataBuffer);

//獲取網頁字符編碼描述信息

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章