| 以前解决gb2312/big5实时转换的做法一般是修改Response.ContentEncoding string switchLanguage(String strLanguage){if(strLanguage.StartsWith("zh-cn")){
 Response.ContentEncoding=Encoding.GetEncoding(936);
 return "gb2312";
 }
 if(strLanguage.StartsWith("zh")){
 Response.ContentEncoding=Encoding.GetEncoding(950);
 return "big5";
 }
 Response.ContentEncoding=Encoding.GetEncoding(1252);
 return "iso-8859-1";
 }
 范例:switchLanguage(Request.UserLanguages[0]);
 
 但有些GB2312简体字没有对应的Big5,所以需要先转换成繁体的Gb2312,再进行转换
 如:“秋水无恨”的无,“中国”的国,就会显示“秋水?恨”和“中?”
 等需要先转化为“秋水無恨”和“中國”,再转化为Big5。
 而filter正好帮助我们实现实时切换,主要源代码如下(_sGB和_tGB是GB2312简繁体对应的库)。       public override void Write(byte[] buffer, int offset, int count){
 Encoding e=Encoding.GetEncoding(936);
 string str=e.GetString(buffer,offset,count);
 for(int i=0;i<str.Length;i++){
 int j=_sGB.IndexOf(str[i]);
 if(j!=-1)str=str.Replace(_sGB[j],_tGB[j]);
 }
 e=Encoding.GetEncoding(System.Web.HttpContext.Current.Response.Charset);
 _sink.Write(e.GetBytes(str), 0, e.GetByteCount(str));
 
 }
 
 范例: <%@ Page Language="C#" %><script runat=server>
 protected void Page_Load(Object sender, EventArgs ev)
 {
  Response.ContentEncoding=Encoding.GetEncoding(936);if(Request["e"]!=null){
 Response.Filter = new qswhFilter.g2bFilter(Response.Filter);
 if(Request["e"]=="1")Response.Charset="big5";
 }
 userName.Text="秋水无恨(qiushuiwuhen)";
 }
 </script>
 <asp:hyperlink runat=server NavigateUrl="g2bFilter.aspx" Text="Gb2312简体" />
 <asp:hyperlink runat=server NavigateUrl="g2bFilter.aspx?e=0" Text="Gb2312繁体" />
 <asp:hyperlink runat=server NavigateUrl="g2bFilter.aspx?e=1" Text="Big5繁体" />
 hi,你好,我是<asp:label runat=server id=userName/>,欢迎来到<%="蓝色经典blueidea"%>。
 ps.如果web.config中有<globalization requestEncoding="gb2312" responseEncoding="gb2312" fileEncoding="gb2312"/>
 可省略
 Response.ContentEncoding=Encoding.GetEncoding(936);
 cs 源代码和dll:g2bFilter.zip
 dll直接拷到应用程序的bin目录即可调用
 出处:CSDN
责任编辑:蓝色
 ◎进入论坛网络编程版块参加讨论
	      |