昨天在使用ASP.NET AJAX Control Tookit 1.0.10618的时候, 发现如果在Web.config中如下设置使用gb2312编码:
<globalization fileEncoding="gb2312" requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" uiCulture="zh-CN"/> AJAX控件无法正常使用,错误为脚本库中出现的,提示为: “出现了运行时间错误。是否要进行调试?行: 684 错误: 缺少'}'” “行: 86 错误: 'AjaxControlToolkit'未定义” 经过搜索与试验,最终比较圆满的解决了这个问题,方案也找到了两种,比较完美的解决了ASP.NET AJAX Control Tookit 1.0.10618的乱码问题。本文记录下我解决这个问题的过程,有一点罗嗦,如果你只想知道结果的话,那就直接看文中强调的部分吧。 我首先在网上搜了一下,发现CSDN也有提类似问题的帖子,但是除了将编码改为utf-8之外没有其他的解决方案,而且还有人质疑为什么一定要用gb2312的编码。在我看来,使用gb2312可能有以下理由: 经过尝试,我发现在ASP.NET AJAX Control Toolkit中提供的示例网站上即使使用了GB2312编码,也可以正常使用。这时<globalization>标签中只有culture="zh-CN" uiCulture="zh-CN"这两个参数不一样,在示例网站中是culture="en-us" uiCulture="en"。在我的网站中,把uiCulture也改为"en"之后,AJAX Control Toolkit可以正常运行了。这样就得到了解决乱码问题的第一个方法: 方案一:将Web.config文件中<globalization>的uiCulture="zh-CN"改为uiCulture="en"。 经过使用Fiddler对修改前后的脚本进行比较,发现这个参数对网站实际的影响表现在AJAX Control Toolkit的国际化方面,参数值en所对应的输出片段为: 方案一十分简单,只是局限性太明显了,有没有更好的办法呢?由于AJAX Control Toolkit是一个开源项目,如果问题确实出在这里面,就给了我们自己修改Bug的机会。在下手之前我们需要知道使用UTF-8和GB2312编码的输出之间有哪里不一样,才能初步判断问题出在哪里。 方案二:修改AJAX Control Toolkit 1.0.10618的源代码,将ToolkitScriptManager.cs的第256行改为using (StreamWriter outputWriter = new StreamWriter(outputStream, context.Response.ContentEncoding)),并重新编译。 至此,ASP.NET AJAX Control Tookit 1.0.10618与GB2312的乱码问题似乎已经完全解决了。只是我在测试的时候,发现在UpdatePanel中提交的文本框中的中文仍然是乱码,说明ASP.NET AJAX Extensions 1.0本身仍然有编码的问题。只是我的网站中使用UpdatePanel的页面都不需要跟其他的GB2312网页直接交互,所以我就把这些页面的编码单独改成了UTF-8,而其他大部分页面使用在Web.config中默认的GB2312编码。这里多说一句,在<%@ Page%>中只能设置ResponseEncoding,无法设置RequestEncoding,而解决这个问题的关键是设置RequestEncoding。可以通过Web.config的<location>标签中针对某一个文件设置其<globalication>标签的requestEncoding属性,如: 比较一下这两个方案,方案一优点是简单,只需要修改一个属性,缺点是不能用在国际化的网站上,而且要能接收可能会出现的英文提示。方案二缺点是需要修改并重新编译Control Toolkit,优点是解决的比较彻底,没有局限性。与方案二的有点相比,其缺点似乎是微不足道的,因为只需要重新编译一次,一劳永逸,且步骤并不复杂。最后留了一个小尾巴,就是ASP.NET AJAX Extensions 1.0的乱码问题,可以通过设置个别页面的编码来绕过,暂时我是没有去解决的动力了,不过它也提供了源代码,感兴趣的朋友们可以尝试一下。 方案二修改后的ASP.NET AJAX Control Toolkit 1.0.10618编译我已经上传到了CSDN的下载栏目,基于1.0.10618的代码,只修改了本文说的那一行代码,版本号和签名都没有变,因此可以直接替换项目中以前用的1.0.10618版本。下载地址: http://download.csdn.net/source/232485。本文所提到的Bug我也已经提交到AJAX Control Toolkit官方网站的Issue Tracker栏目,如果你也遇到了类似的问题,不妨来投一票,以便引起开发者的重视,也许在下一个官方版本就会解决了。 |
在ASP.NET AJAX Control Toolkit 1.0中使用GB2312的编码时出现乱码的两种解决方案
最新推荐文章于 2024-11-06 16:56:17 发布
转自http://hi.baidu.com/thinsoft/blog/item/007dbd50c961195e1138c22d.html
在ASP.NET AJAX Control Toolkit 1.0中使用GB2312的编码时出现乱码的两种解决方案
2007-08-23 11:52