没有完全解决的编码问题:asp和utf-8编码(ZT)

本文描述了在ASP项目中遇到的中文乱码问题,尤其是在使用UTF-8编码时通过GET方式传递中文参数所遇到的挑战。作者尝试了多种解决方案但均未能完全解决问题,最终采取了一种临时的客户端编码方案。
上一周过得很痛苦,想不到一个看上去很简单的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编码编码所有字符串。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值