Windows Phone 7的WebBroswerTask编码问题
时间:2010-12-08 来源:博比123
WebBrowserTask task = new WebBrowserTask(); task.URL = "http://www.google.com.hk/m/search?q=%E5%93%88%E5%93%88"; task.Show();
自己在VS里试了一下,果然如此,搜索结果是乱码。
遇到这种问题第一反应就是编码问题,查看了一下模拟器的地址栏里,%E5%93%88%E5%93%88被编码成了奇怪的字符,打开MSDN查看了一个URL这个属性,其中在Remarks里有这样的描述:URLs that contain special characters must be escaped before being assigned to the URL property. Use the Uri.EscapeDataString method to escape the URL string.(地址:http://msdn.microsoft.com/query/dev10.query?appId=Dev10IDEF1&l=EN-US&k=k(MICROSOFT.PHONE.TASKS.WEBBROWSERTASK.URL);k(URL);k(TargetFrameworkMoniker-%22SILVERLIGHT,VERSION%3dV4.0%22);k(DevLang-CSHARP)&rd=true)
于是重新尝试了一下,修改了代码如下:
WebBrowserTask task = new WebBrowserTask(); task.URL = "http://www.google.com.hk/m/search?q=" + Uri.EscapeDataString("哈哈"); task.Show();
再看一下,哇,还是乱码。百思不得奇解,难道是MSDN出问题了?再仔细阅读了一下刚才那段Remarks,注意到了中间这样的关键句:be escaped before being assigned to the URL property.嗯,人家说是针对属性进行序列化的嘛,于是再改进代码:
WebBrowserTask task = new WebBrowserTask(); task.URL = Uri.EscapeDataString("http://www.google.com.hk/m/search?q=" + Uri.EscapeDataString("哈哈")); task.Show();
F5,运行成功,但是还是有些疑惑。照理说Uri.EscapeDataString("哈哈")以后URI里就不含有特殊字符了,为什么还需要再序列化一次呢?求各位达人解惑下,不胜感激。