關於silverlight和wp7(windows phone 7)是預設不支援gb2312解碼的,
所以從網上下載的Html大部分都是亂碼。
例如:http://news.sina.com.cn/s/2011-11-25/120923524756.shtml
下面是示範一個wp7程式
1 WebClient webClenet=new WebClient();
2 webClenet.DownloadStringAsync(new Uri("http://news.sina.com.cn/s/2011-11-25/120923524756.shtml", UriKind.RelativeOrAbsolute));
3 webClenet.DownloadStringCompleted += new DownloadStringCompletedEventHandler(webClenet_DownloadStringCompleted);
4
5
6
7
8
9
10 回調事件:
11 void webClenet_DownloadStringCompleted(object sender, DownloadStringCompletedEventArgs e)
12 {
13 string s= e.Result;
14 }
調試發現
幾乎全部是亂碼問題.
將編碼設為utf-8同樣是亂碼。
於是引用了一個開源的庫HtmlAgilityPack(包含編碼還處理HTML節點)
為:http://www.codeplex.com/htmlagilitypack
將HtmlAgilityPack.dll引用到項目中,這時會彈出一個提示,大概就是這不是一個windows phone的類庫,不理會,直接確定。
然後修改一下我們的代碼
WebClient webClenet= new WebClient(); |
webClenet.Encoding = new HtmlAgilityPack.Gb2312Encoding(); //加入這句設定編碼 |
webClenet.DownloadStringAsync( new Uri( "http://news.sina.com.cn/s/2011-11-25/120923524756.shtml" , UriKind.RelativeOrAbsolute)); |
webClenet.DownloadStringCompleted += new DownloadStringCompletedEventHandler(webClenet_DownloadStringCompleted); |
調試一下,結果
終於看到我們的中文啦。
同時,HtmlAgilityPack不僅幫我們解決了gb2312的編碼問題,它還是我們解析HTML的利器哦~!