Windows Phone 7 WebBrowser中文亂碼問(wèn)題
Windows Phone 7中的WebBrowser很好用,其中最常用的方法應(yīng)該是Navigate了,該方法傳入一個(gè)Uri對(duì)象,既可以是某個(gè)網(wǎng)址的絕對(duì)路徑,也可以是IsolateStorage里某個(gè)網(wǎng)頁(yè)的相對(duì)路徑。但有時(shí)候,我們的HTML是程序動(dòng)態(tài)生成的,這個(gè)情況下使用NavigateToString方法則更加方便(否則需要先將網(wǎng)頁(yè)寫入IsolateStorage),然而卻遇到了中文亂碼問(wèn)題,比如如下一個(gè)極簡(jiǎn)單的例子就會(huì)出現(xiàn)亂碼情況。
- WebBrowser1.NavigateToString("<html><head></head><body><h1>這里是中文內(nèi)容</h1><h2>Here are English Content</h2></body></html>");
經(jīng)過(guò)網(wǎng)上搜索,找到了解決方案,原文為International UTF-8 Characters in Windows Phone 7 WebBrowser Control,里面給出了一個(gè)轉(zhuǎn)換算法,經(jīng)過(guò)實(shí)驗(yàn),亂碼問(wèn)題解決了,但是效率比較低(尤其是HTML有幾十KB的時(shí)候),所以又簡(jiǎn)單改進(jìn)了一下如下。
- public static string ConvertExtendedASCII(string HTML)
- {
- StringBuilder str = new StringBuilder();
- char c;
- for (int i = 0; i < HTML.Length; i++)
- {
- c = HTML[i];
- if (Convert.ToInt32(c) > 127)
- {
- str.Append("&#" + Convert.ToInt32(c) + ";");
- }
- else
- {
- str.Append(c);
- }
- }
- return str.ToString();
- }
OK,重新運(yùn)行一下NavigateToString,沒(méi)有亂碼了,這樣一來(lái),Windows Phone的WebBrowser就比較***了。
- WebBrowser1.NavigateToString(ConvertExtendedASCII("<html><head></head><body><h1>這里是中文內(nèi)容</h1><h2>Here are English Content</h2></body></html>"));
原文地址:http://www.wtnzone.com/post/2011/09/05/WP7-WebBrowser-NavigateToString-International-UTF-8.aspx