[Windows Phone/C#] HtmlAgilityPack使用時遇到Big5編碼的問題與處理

由於有網友問到使用HtmlAgilityPack 時遇到Big5編碼會找掛掉的這個問題,於是尋找了資料解決才有了這篇文章。

不過要感謝點部落的大大中已經有人找到解決的辦法~

感謝Pou與Mr.Big兩位前輩所寫的文章,實際時做過一遍後,並在這裡做個紀錄方便以後遇到時不會忘記。

前言

 


 

由於有網友問到使用HtmlAgilityPack 時遇到Big5編碼會找掛掉的這個問題,於是尋找了資料解決才有了這篇文章。

不過要感謝點部落的大大中已經有人找到解決的辦法~

感謝PouMr.Big兩位前輩所寫的文章,實際時做過一遍後,並在這裡做個紀錄方便以後遇到時不會忘記。

 

使用WebBrowser類別

 


 

WebBrowser是一個把Html文件內容顯示在應用程式上的類別,換句話說就是可以開啟網路上的網頁內容,把網頁的內容顯示在你的應用程式中,而WebBrowser除了可以網路上的內容外,也可以自訂HTML文件先儲存在裝置中讀取並顯示在你的WP上,或是在程式執行時動態產生HTML文件並顯示出來

所以這邊透過WebBrowser把我們想要的網頁載入進來

 

這邊以中油網站為例,中油是使用Big5

 

 

WebBrowser htmlbrowser;
        
// 建構函式
public MainPage()
{
       InitializeComponent();
     
       //中油網站 http://www.cpc.com.tw/big5/home/index.asp 
       htmlbrowser = new WebBrowser();
       htmlbrowser.LoadCompleted += browserNews_LoadCompleted;	       
    htmlbrowser.Source = new Uri("http://www.cpc.com.tw/big5/home/index.asp ");
}

 

 

透過SaveToString取得Html

上述透過LoadCompleted事件,來讓我們在載入好網頁的內容後,可以拿到Html文件,搭配SaveToString()方法把Html文件架構語法轉換成字串,不過很妙的是,這邊如此轉換可以避免掉編碼問題!

string contentHTML = htmlbrowser.SaveToString();
HtmlDocument htmlDoc = new HtmlDocument();
htmlDoc.LoadHtml(contentHTML);

 

                

使用HtmlAgilityPack方法取得想要的內容

這邊我要取得中油網頁中的跑馬燈資料

HtmlNodeCollection nameNodes = htmlDoc.DocumentNode.SelectNodes("/html/body/table/tbody/tr[2]/td/marquee");
foreach (HtmlNode node in nameNodes)
{
        string strValue = (node.InnerText);
        Debug.WriteLine(strValue);
}

 

 

中油的跑馬燈文字畫面

 

這邊是擷取出來的是顯示的內容

 
 
 
 

參考資料:

webBrowser

webBrowser class

http://www.dotblogs.com.tw/pou/archive/2013/04/03/99824.aspx

http://www.dotblogs.com.tw/hungys/archive/2013/05/12/103526.aspx

 


 

文章中的敘述如有觀念不正確錯誤的部分,歡迎告知指正 謝謝 =)

另外要轉載請附上出處 感謝