欢迎来到我的地盘:今天是

若得山花插满头,莫问奴归处!

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::
上一周过得很痛苦,想不到一个看上去很简单的utf-8编码问题会耗去我好几天的时间,更让人无法接受的是耗去如此多的时间,还是没有找到完美些的解决方案。

事件描述:

    图书馆的网页初稿是周望云的弟弟做的,用asp.net(C#)写的,这样一来我只要写一个图书查询的功能连上去就可以了。这个倒简单,我用asp写,配合asp.net来使用,很正常。可是教务处的要求比较高,希望能记录师生搜索的关键字,并且能统计他们关注的页面或者书籍。按常理说,我写一个这样的统计系统也不难,估计用不了1天时间。但是在测试代码时遇到了意想不到的麻烦:中文乱码了!

     因为原asp.net的页面是采用utf-8编码的,考虑到统一,我把自己写的asp页面也采用utf-8编码。但是在接收get方式的参数时发现中文变乱码了,根本无法正常接受中文参数。测试了n种方案:
1、发送页面utf-8编码,接收页面用utf-8编码,根本无法接收带中文的参数,全部乱码,乱得一团糟,连不同变量都混在一起了。
2、发送页面utf-8编码,接收页面用gb2312编码,中文参数是偶数的正常接收,如果是奇数,则最后一个字符丢失。试过网上所有的转编码的过程函数、类,都失败。

    找了很多资料,参考了很多源码,没有成功!反而发现提出类似问题的人都是学java的,搞wap的,像我这种用asp的,还在要研究utf-8的sb估计全中国也寥寥无几。

临时解决方案:使用客户端接收referrer,然后用encodeURIComponent编码,后台接收,不会出现任何问题。

未解的问题:
1、google是怎么解决接收get方式发送的关键字?并且无论关键字编码还是未编码都可以正常接收。


一些资料:

javascript中可用的编码解码函数,有如下的组合:
  • escape(string);
    unescape(string);
  • encodeURI(string);
    decodeURI(string);
  • encodeURIComponent(string);
    decodeURIComponent(string);

他们之间的区别为:

escape/unescape:
以16进制编码字符串,对空格、符号等字符用%xx编码表示,对中文等字符用%uxxxx编码表示。自javascript1.5之后,此方法已经不被推荐使用。

encodeURI/decodeURI:
以UTF-8编码编码字符串,对这些字符:“; , / ? : @ & = + $”不做编码。

encodeURIComponent/decodeURIComponent:
以UTF-8编码编码所有字符串。

posted on 2008-09-25 10:56  莫问奴归处  阅读(856)  评论(1编辑  收藏  举报
轩轩娃