由于主要在后台编码,ASP.NET默认用的UTF-8字符集。当时也没怎么注意这个问题,只是看到网页上有乱码的时候才想起来是字符集设置有问题。
可是昨天做网页测试的时候发现用URL传参有乱码,在网上搜了下,最后在Web.config里configuration-》system.web下,加了一行全局字符集的设置<globalization requestEncoding="gb2312" responseEncoding="gb2312"></globalization>。这样传参乱码的问题解决啦,可是又出现新问题:以前都可以用的GridView排序功能会报错。当时很奇怪,跟踪了一下发现列名为英文名的可以用,而中文名在获取排序列的参数e.SortExpression时是乱码。看来system.web里的设置是行不通了。
在网上看一个网友写的博客上说,自己在做网站的时候,由于美工在前台用的是GB2312而后台程序员用的是ASP.NET默认的UTF-8字符集,结果在最后整合的时候很费周折。其中他提到了尝试使用两个config文件(前台一个后台一个),然后就像上面一样,在globalization节对requestEncoding和responseEncoding的字符集编码分别设置。虽然觉得绕的有点头晕,但觉得是一个不错的解决方法,可惜网友告诉我他失败了~最后他还是所有前台的字符集改成了UTF-8。
可我遇到了比这更麻烦的事,我前台本来就是设置的UTF-8编码,后来在javascript中都加了这么一句<script type="text/javascript" charset="UTF-8">,可还是没办法乱码还是乱码~
无法,开始转向其它方法,由于对javascript颇有偏见,刚开始从后台着手。看到有人用HttpUtility.ParseQueryString,那我也用吧。
Code
结果还是乱码。。 当时很无奈:难道javascript字符集不是UTF-8,也不是GB2312,那是什么?GBK?uicode?
也看到有人说用UrlEncode和UrlDecode,那么UrlEncode就应该在前台javascript里实现了,无奈我对javascript感觉不好,试了一两次不行就放弃了。心想总不会就只有着一种方法吧。
然后看到javascript在内部也是实现了UrlEncode的,只是叫法不一样(encodeURIComponent)。一时如获至宝,放在我处理的参数串中,结果又失败了。。系统提示我的URL地址“不是有效的虚拟路径”。查了下,微软的解释是URL地址里存在冒号还有什么我记不清了~奇怪,为什么编码出现这样的问题?不得其解就只好老老实实的对每一个传递参数的汉字部分分别给加了个encodeURIComponent,问题解决!
忘记说了,前面还遇到因为字符集而出现的一个更诡异的问题:我的一个DropDownList明明添加了六七项数据,可第一项和第二项的index没问题,但选取后面几项时index还是0。。。
PS:折腾了这么长时间,竟然就只是因为字符集的问题,以后得小心