ASP.NET服务器控件提交中文时出现乱码--解决方案

问题如下:
    服务控件如DropDownList,ListBox,RadioBottonList以及TextBox在提交中文时(如写入数据库或者输出页面显示)均出现乱码(“??”)。在ListBox,RadioBottonList选项里有中文则会出现编译错误。

问题分析解决:

    我们在VS.NET中设置页面<meta http-equiv="Content-Type" content="text/html; charset=gb2312">可以通过以下方式

          注意红色的地方,问题就出现在这里,当设置charset为“GB2312”时,codePage会自动设置为“936”。

         CodePage的解释:可读/可写。整型。定义用于在浏览器中显示页内容的代码页。代码页是字符集的数字值,不同的语言使用不同的代码页。例如,ANSI代码页为1252,日文代码页为932,简体中文代码页为936。一般情况下,当你上传到国外网页空间,或者提取数据库记录等出现乱码时,就采用这种方法解决。

         此时应该去掉<%@ Page Language="c#" ContentType="text/html" ResponseEncoding="gb2312" ........ codePage="936"%>中的codePage="936",或者直接在上图中删除CodePage后的“936”。

       PS:网上的另一种解决办法是去掉ResponseEncoding="gb2312"。



updatepanel中当ContentComplate里面存在TextBox的时候会出现中文乱码

一般存在这样两个解决方案:
1. 在web.config里面增加
<globalization fileEncoding="utf-8" requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-CN"/>
2. 在后台代码里面对乱码进行decoder操作

上面两种都不是好的方案,第一个可能会导致其他的页面出现问题, 第二个虽然存到数据库中的是正确的,但是,用户看到的仍然是乱码,严重影响用户体验。那么,最好的解决方法在哪里?

解决思路:我们可以通过对web.config文件增加 <location> 配置节来对特定文件或者目录进行encoding配置 ,如下:
<location path="此处为目录或文件名">
    <system.web>
      <globalization fileEncoding="utf-8" requestEncoding="utf-8" responseEncoding="utf-8" culture="zh-CN"/>
    </system.web>

  </location> 

posted @ 2009-01-15 10:42  zzh  阅读(2472)  评论(1编辑  收藏  举报