利用filter實時切換big5和gb2312,以及gb2312的簡繁體 (轉)

amyz發表於2007-10-17
利用filter實時切換big5和gb2312,以及gb2312的簡繁體 (轉)[@more@]

以前解決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 overr 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   int j=_sGB.IndexOf(str[i]);
   if(j!=-1)str=str.Replace(_sGB[j],_tGB[j]);
  }
  e=Encoding.GetEncoding(System..HttpContext.Current.Response.Charset);
  _sink.Write(e.GetBytes(str), 0, e.GetByteCount(str));
 
  }
 

範例:

" %>

<:hyink runat=server NavigateUrl="g2bFilter." Text="Gb2312簡體" />


hi,你好,我是

ps.如果web.config中有
 
可省略
 Response.ContentEncoding=Encoding.GetEncoding(936);

cs 原始碼和dll:

dll直接拷到應用程式的bin目錄即可


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752019/viewspace-977254/,如需轉載,請註明出處,否則將追究法律責任。

相關文章