[asp.net]控制ajax接收数据的编码格式和避免乱码的方法
2011-11-22 09:30 slmk 阅读(1498) 评论(3) 编辑 收藏 举报情况是这样的:很久以前写过一个ajax应用,使用的YUI框架,一直用着没问题,偶尔有用户反映不行,当时简单的归结为RP问题,因为一样的系统,一样版本的浏览器,为什么单单你不行呢?没有深究,可最近,自己遭遇了这种RP问题。问题出在安装了vs2010 express中文版之后,原先的IE6访问该应用时显示乱码。可是用户一个都没反映有问题。Google后没有找到答案,只好自己研究。
首先想到的是编码格式的问题,调试发现在服务器端输出的json数据没有任何乱码,可一到浏览器端中文就会乱掉。检查web.config。发现配置了请求响应的编码格式:
<globalization requestEncoding="gb2312" responseEncoding="gb2312"/>
大家都知道UTF8才是统一的编码格式,并且是默认格式。然而由于某种原因(要从团队其他成员做的gb2312的页面给我传值),为了图省事,改成了gb2312。建议大家不要用gb2312了,有了utf8,gb2312根本没有用武之地,只会增加出现乱码的情况。其实当初的图省事儿是没有必要的,因为只要在需要接收数据的aspx页面设一下请求的编码格式,就能正确的解码了:
Request.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
上面的不管用?使用:
public void Application_BeginRequest(object sender, EventArgs args) { //根据地址选择编码格式,适合于混合两种编码的情况 Request.ContentEncoding = Encoding.GetEncoding(inputEncoding); }
指出请求的页面编码是gb2312,请不要再用默认的utf-8解码了。完全不用设置这种全局 globalization。
言归正传,我的ajax应用为什么会出现乱码呢?我想是javascript对gb2312的支持不够智能造成的,javascript对UTF-8的支持应该是比gb2312好。如果由于某种原因,例如可能是安装了某一软件,改变了某些底层的东西,会导致gb2312编码js无法正确解释,而UTF-8却完全不用担心RP问题的出现。
如果继续图省事,也可以在返回json数据之前,设置成UTF8编码:
Response.ContentEncoding = Encoding.UTF8;
这样你的Ajax应用也不会出现乱码了。
避免乱码的方法就是整个网站,或者至少是你的团队都用一种编码格式,那就是Utf-8。导致乱码的原因就是编码不一致造成的。
IE中随便打开一个网站,你会发现网页编码都是utf-8:
查看源代码,你会发现:
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
如果从其它网页导航到你的aspx后,出现了乱码,通常是url传值时(cookie不知道会不会乱),此时不要随便更改你的globalization,如果这样你就被传染了,而是设置Request的ContentEncoding。
自言自语:有些人就是幸运,可能一辈子都不会遇到这种事,而有些人可能注定不幸,经常遭遇RP问题,我想我可能是后一种人,于是才有了这篇儿。
昨天写了这篇:[Asp.net]更新全局程序集缓存的注意事项。没敢发到首页,结果访问量至今为0。