以前做Java Web开发的时候经常遇到乱码问题
,主要原因就是编码没有统一的问题
。但在使用ASP.NET的时候
,又来还没碰到过乱码问题,今天有幸遇到了
。情况是这样的:
一个ASP.NET站点部署在Web
服务器上,访问是正常的;当把站点复制下来,部署到开发人员的机器上的时候,发现所有的页面访问都是乱码。两边操作系统环境是一致的,都是Windows2003sp2+IIS6+.net framework3.5。
遇到这个问题之后,首先是分析一下站点和页面的编码。IIS站点的编码是utf-8的,页面是ANSI的,这种情况在Web
服务器上是正常的,流程的网页无乱码。但在开发人员的机器上,把页面的编码从ANSI转换为utf-8之后,被转换的这个页面无乱码了,但其它页面依旧。虽然问题的原因貌似找到了,但解决起来实非易事,这么多的页面,一个一个的进行编码转换实在是浪费时间,而且在Web服务器上是好的,为什么到开发人员机器上却出了问题呢?解决的方法就要从开发人员的机器配置或者IIS配置入手。
机器配置没什么好说的了,从区域语言到国家,都没有异常,况且这种情况一般不太会和操作系统有关系。那么问题只会出现在IIS上了。通过逐步对照两台机器的站点配置,问题的原因终于找到了。原来IIS可以读取ANSI编码格式的文件,而且使用utf-8进行request和response。而这个配置就在C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\CONFIG\web.config这个全局文件中,主要是这一段代码:
<globalization fileEncoding="gb2312" />
改文件毕竟是麻烦的,有一种通过UI进行修改的方法:打开IIS—-选择一个站点—-右键属性—-ASP.NET页签—-编辑全局配置—-在打开的“ASP.NET配置设置”窗口中选择“应用程序”页签—–修改文件编码为gb2312(即你的ASP.NET文件的编码格式),这样就不再有乱码问题了。
话说微软这样做真是人性化,Java中的tomcat等为什么不这么做呢,其实乱码的核心问题就是编码格式不一致的问题呢。如果像微软这样可以指定文件编码格式、request和response的编码格式,真会少走很多弯路。