在IE6下访问是没任何问题的,不过在IE7下就会“革皮”!
因为伟大的IE7为了解决中文域名(不仅仅是中文域名),特意增加一个编码方式:punycode 如果你在IE7下访问http://博客园.cnblogs.com,并在你的HttpModule里捕捉HttpApplication.Request.Url,发现原型是: http://xn--9kr06fj5e.cnblogs.com 此时如果你想要得到的“博客园”实际是“xn--9kr06fj5e”。 这样如果二级(或其他级域名)中如果有中文如何正确接受到呢?查下msdn,也没发现c#有直接从punycode到汉字的解码方法, 不过有个东东可以暂时解决一下: 下载:http://www.motobit.com/dlldownload/ScptUtl.exe并注册吧!!(有使用限制)
使用方法: // /// IE7下中文域名解决 /// /// /// string getCode(string str) { string code = str.Trim(); try { ScriptUtilities.ByteArray ba = new ScriptUtilities.ByteArray(); ba.CharSet = "gb2312"; ba.Punycode = str.Trim().Replace("xn--", ""); code = ba.String; } catch { //出错 }
return code; } 这样就能把在IE7下接受到的“xn--9kr06fj5e”转换为“博客园”,暂时解决了。。。
不知那位朋友有从punycode到gb2312 c#算法?谢谢。 也不知道.net 3.x为什么不提供此解码方式?python等都已经提供。 |