杭州设计公司,杭州广告设计公司
网页设计
ASP自动识别URI使用的编码(gbk/utf-8)并正确解码
信息来源:未知     栏目类别: 网页设计     浏览次数:     发表评论 减小字体 增大字体
天在 CSDN 有网友问到 ASP 中 UTF-8 转 GB2312 的问题
见:http://topic.csd**.**et/u/20080729/18/b257b0ce-d947-495d-a722-00b8b6a577dc.html

使用的是网上流行的 UTF2GB(UTFStr) 函数。
代码甚是复杂,但其实目的是为了实现 JScript 里 decodeURICompo**e**t 功能。
我很是郁闷,既然 JScript 有 decodeURICompo**e**t,而且 ASP 又可以使用 JScript 为什么现成的内置函数不用呢?如:
查看源码复制到剪贴板打印
  1. <script&**bsp;la**guage="JScript"&**bsp;ru**at="Server">&**bsp;&**bsp;
  2. fu**ctio**&**bsp;decodeURL(s)&**bsp;{&**bsp;retur**&**bsp;decodeURICompo**e**t(s)&**bsp;} &**bsp;&**bsp;
  3. </script>&**bsp;&**bsp;
  4. <% &**bsp;&**bsp;
  5. Respo**se.Write&**bsp;decodeURL("%E6%8A%9A%E9%A1%BA%E9%9D%92%E6%9D%BE%E8%8D%AF%E4%B8%9A") &**bsp;&**bsp;
  6. %>&**bsp;&**bsp;


可能有些朋友就特不喜欢 JScript, 那么利用一下 ADODB.Stream 转码也方便的多
查看源码复制到剪贴板打印
  1. Fu**ctio**&**bsp;UTF2GB(s) &**bsp;&**bsp;
  2. &**bsp;&**bsp;&**bsp;&**bsp;With&**bsp;Server.CreateObject("ADODB.Stream") &**bsp;&**bsp;
  3. &**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;.Type&**bsp;=&**bsp;2 &**bsp;&**bsp;
  4. &**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;.Mode&**bsp;=&**bsp;3 &**bsp;&**bsp;
  5. &**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;.Ope** &**bsp;&**bsp;
  6. &**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;.CharSet&**bsp;=&**bsp;"iso-8859-1"&**bsp;&**bsp;
  7. &**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;.WriteText&**bsp;U**Escape(s)&**bsp;'&**bsp;使用&**bsp;u**escape&**bsp;解码成&**bsp;iso-8859-1&**bsp;串后&**bsp;利用&**bsp;ADODB.Stream&**bsp;转换编码 &**bsp;&**bsp;
  8. &**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;.Positio**&**bsp;=&**bsp;0 &**bsp;&**bsp;
  9. &**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;.CharSet&**bsp;=&**bsp;"UTF-8"&**bsp;&**bsp;
  10. &**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;UTF2GB&**bsp;=&**bsp;.ReadText(-1) &**bsp;&**bsp;
  11. &**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;.Close &**bsp;&**bsp;
  12. &**bsp;&**bsp;&**bsp;&**bsp;E**d&**bsp;With&**bsp; &**bsp;&**bsp;
  13. E**d&**bsp;Fu**ctio**&**bsp;&**bsp; &**bsp;&**bsp;
  14. &**bsp;&**bsp; &**bsp;&**bsp;
  15. Respo**se.Write&**bsp;UTF2GB("%E6%8A%9A%E9%A1%BA%E9%9D%92%E6%9D%BE%E8%8D%AF%E4%B8%9A")&**bsp;&**bsp;

^_^ 上面说了这么多,都跟主题没什么关系

在原来贴子中,提问的网友最后提到了一个很好的问题。
就是像:
"抚顺青松药业"
GBK 的 URI 编码是 "%B8%A7%CB%B3%C7%E0%CB%C9%D2%A9%D2%B5"
UTF-8 的 URI 编码是 "%E6%8A%9A%E9%A1%BA%E9%9D%92%E6%9D%BE%E8%8D%AF%E4%B8%9A"

在未知何种编码格式的情况下,如何能**动识别其编码,正确解出 "抚顺青松药业" (Google 就能做到)

这个问题之前**己也有被难住过,那时候是做页面统计时,为了分析用户从搜索引擎进入时,用户搜的是什么关键字,这就需要从来路页面的地址中分析出关键字,而 提交给 Google 的搜索关键字有时是 GBK 的 URI 编码,有时是 UTF-8 的 URI 编码。这就要求我们也必须能像 Google 一样能识别出 URI 串是用了什么编码。

在搜索了 UTF-8 的编码规则后,终于写出了下面的代码
查看源码复制到剪贴板打印
  1. Fu**ctio**&**bsp;DecodeURI(ByVal&**bsp;s) &**bsp;&**bsp;
  2. &**bsp;&**bsp;&**bsp;&**bsp;s&**bsp;=&**bsp;U**Escape(s) &**bsp;&**bsp;
  3. &**bsp;&**bsp;&**bsp;&**bsp;Dim&**bsp;cs&**bsp;:&**bsp;cs&**bsp;=&**bsp;"GBK"&**bsp;&**bsp;
  4. &**bsp;&**bsp;&**bsp;&**bsp;With&**bsp;New&**bsp;RegExp &**bsp;&**bsp;
  5. &**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;.Patter**&**bsp;=&**bsp;"^(?:[\x00-\x7f]|[\xfc-\xff][\x80-\xbf]{5}|[\xf8-\xfb][\x80-\xbf]{4}|[\xf0-\xf7][\x80-\xbf]{3}|[\xe0-\xef][\x80-\xbf]{2}|[\xc0-\xdf][\x80-\xbf])+$"&**bsp;&**bsp;
  6. &**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;If&**bsp;.Test(s)&**bsp;The**&**bsp;cs&**bsp;=&**bsp;"UTF-8"&**bsp;&**bsp;
  7. &**bsp;&**bsp;&**bsp;&**bsp;E**d&**bsp;With&**bsp;&**bsp;
  8. &**bsp;&**bsp;&**bsp;&**bsp;With&**bsp;CreateObject("ADODB.Stream") &**bsp;&**bsp;
  9. &**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;.Type&**bsp;=&**bsp;2 &**bsp;&**bsp;
  10. &**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;.Mode&**bsp;=&**bsp;3 &**bsp;&**bsp;
  11. &**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;.Ope** &**bsp;&**bsp;
  12. &**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;.CharSet&**bsp;=&**bsp;"iso-8859-1"&**bsp;&**bsp;
  13. &**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;.WriteText&**bsp;s &**bsp;&**bsp;
  14. &**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;.Positio**&**bsp;=&**bsp;0 &**bsp;&**bsp;
  15. &**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;.CharSet&**bsp;=&**bsp;cs &**bsp;&**bsp;
  16. &**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;DecodeURI&**bsp;=&**bsp;.ReadText(-1) &**bsp;&**bsp;
  17. &**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;&**bsp;.Close &**bsp;&**bsp;
  18. &**bsp;&**bsp;&**bsp;&**bsp;E**d&**bsp;With&**bsp;&**bsp;
  19. E**d&**bsp;Fu**ctio**&**bsp;&**bsp;
  20. &**bsp;&**bsp;
  21. Respo**se.Write&**bsp;DecodeURI("%B8%A7%CB%B3%C7%E0%CB%C9%D2%A9%D2%B5") &**bsp;&**bsp;
  22. Respo**se.Write&**bsp;DecodeURI("%E6%8A%9A%E9%A1%BA%E9%9D%92%E6%9D%BE%E8%8D%AF%E4%B8%9A")&**bsp;&**bsp;

偶尔也会有 GBK 编码串被误认为 UTF-8 的,不过,误认的问题并不好解决,Google 都也会出这样的问题。
上一篇:怎样才算是成功的网站设计?          回网页设计列表         下一篇:高品质的网页设计的实例与技巧
搜索本站其他内容: 百度一下:[ASP自动识别URI使用的编码(gbk/utf-8)并正确解码]   Google搜索:[ASP自动识别URI使用的编码(gbk/utf-8)并正确解码]
最新网友评论文章↓
1.靠2009-11-19 20:42:45
2.去2009-11-19 20:39:41
3.脑残还是变相炫富?2009-11-16 20:17:58
4.好感动哦2009-11-7 15:40:32
5.怎么学习2009-10-20 10:54:50

文章添加时间:2011-3-5,文件大小:20.55 KB,最近更新时间:2011-12-16 18:16:18 返回TOP↑            

本站文章搜集自网络;共享网络,共享快乐,我为人人,人人为我;如果您知道本站未知来源文章请告知本站谢谢!
文中及留言观点不代表本站;本站转载内容只是为了更好的交流;
若侵犯了您的版权请联系E-mail:有事儿,您Q我!,本站核实后立即处理!

  •             平面设计| 标志设计| 包装设计| 网页设计| 广告设计| VI设计| 画册设计| 专卖店设计| 展位设计| 名片设计| 网站地图|    建议使用IE5及以上1024*768分辨率
  •             友情链接 版权所有 © 杭州威迪广告公司 2008-2010 | TEL:0571-88385993 13296756810 浙ICP备09011107号