代號為Mango的Windows Phone SDK 7.1支援的編碼字元集為UTF-8、UTF-16、UTF-16BE和UTF-16LE,遺憾的是沒有GB2312 。而在開發中文Windows Phone應用時,我們卻遇到Web服務上的字元集為GB2312的困惑。
本文總結了GB2312轉換的幾種方式,當您再遇到類似的問題時不必大費周折的網路搜尋或者提問了,只要在其中選擇一個喜歡的方式去解決即可。在此特別感謝在MSDN論壇分享第三種解決方案的逆龍咆哮(網名)。
本文尚有不足之處,敬請指點迷津。
方法一 GB2312 for Silverlight
GB2312Encoding類繼承Encoding 抽象類別,能讓Silverlight(包括Windows Phone)應用支援 GB2312 簡體中文字元集。
GB2312Encoding類完整的實現了 Encoding 的所有功能,因此你可以很容易的實現所有的字元集編碼功能。
程式碼範例
WebClient _wc = new WebClient();
_wc.Encoding = new GB2312.GB2312Encoding();
_wc.DownloadStringCompleted += (ss, ee) => txtResult.Text = ee.Result;
_wc.DownloadStringAsync(new Uri(txtUrl.Text));
如何使用
把 GB2312Encoding.cs 和 gb2312.bin 檔案複製到你的項目並確保:
gb2312.bin 檔案的build action 屬性設定為 "Embedded Resource"
gb2312.bin 檔案的檔案名稱正確(不能修改此檔案名稱)
GB2312Encoding.cs 和 gb2312.bin 檔案在同一個檔案夾
http://gb2312.codeplex.com/
方法二 在Web服務上執行Encoding和Decoding
利用.NET Framwork提供的其它的Encoding類如:System.Text.ASCIIEncoding, System.Text.UTF7Encoding 和 System.Text.UTF32Encoding,在Web服務上執行Encoding和Decoding操作。
方法三 解析GB2312編碼的XML檔案
XML的編碼是GB2312,使用using (XmlReader reader = XmlReader.Create(streamResult))讀取的時候系統會提示錯誤資訊:system does not support "gb2312"。那麼該如何解決呢?
首先將Stream轉換成string,再讀取XML的資訊。
var sr = new StreamReader(streamResult);
string srResult = sr.ReadToEnd();
using (XmlReader reader = XmlReader.Create(new StringReader(srResult)))
{
reader.ReadToFollowing("encode");
encode = reader.ReadElementContentAsString();
reader.ReadToFollowing("decode");
decode = reader.ReadElementContentAsString();
}
作者: 雪松
出處: http://www.cnblogs.com/highcedar
新浪微博: http://weibo.com/highcedar
關於作者:
專註於Windows Azure和Windows Phone的開發。
本文著作權歸作者和部落格園共有,轉載請註明出處和作者。