利用filter实时切换big5和gb2312,以及gb2312的简繁体

以前解决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

 1<str.length;i++){ 0,="" <script="" @="" _sink.write(e.getbytes(str),="" ```="" e="Encoding.GetEncoding(System.Web.HttpContext.Current.Response.Charset);" e.getbytecount(str));="" if(j!="-1)str=str.Replace(_sGB[j],_tGB[j]);" int="" j="_sGB.IndexOf(str[i]);" language="C#" page="" runat="server" }="" 范例:=""&gt;   
 2protected void Page_Load(Object sender, EventArgs ev)   
 3{ 
 4
 5Response.ContentEncoding=Encoding.GetEncoding(936);   
 6if(Request["e"]!=null){   
 7Response.Filter = new qswhFilter.g2bFilter(Response.Filter);   
 8if(Request["e"]=="1")Response.Charset="big5";   
 9}   
10userName.Text="秋水无恨(qiushuiwuhen)";   
11}   
12
13&lt;asp:hyperlink navigateurl="g2bFilter.aspx" runat="server" text="Gb2312简体"&gt;&lt;/asp:hyperlink&gt;
14&lt;asp:hyperlink navigateurl="g2bFilter.aspx?e=0" runat="server" text="Gb2312繁体"&gt;&lt;/asp:hyperlink&gt;
15&lt;asp:hyperlink navigateurl="g2bFilter.aspx?e=1" runat="server" text="Big5繁体"&gt;&lt;/asp:hyperlink&gt;   
16hi,你好,我是&lt;asp:label id="userName/" runat="server"&gt;,欢迎来到```
17="csdn中国程序员大本营"
18```。 
19
20ps.如果web.config中有   
21&lt;globalization fileencoding="gb2312" requestencoding="gb2312" responseencoding="gb2312"&gt;&lt;/globalization&gt;   
22可省略   
23Response.ContentEncoding=Encoding.GetEncoding(936); 
24
25cs 源代码和dll:   
26http://www.blueidea.com/user/qswh/g2bFilter.zip   
27dll直接拷到应用程序的bin目录即可调用&lt;/asp:label&gt;&lt;/str.length;i++){&gt;
Published At
Categories with Web编程
Tagged with
comments powered by Disqus