最近在處理一個網站,要求有簡體和繁體中文兩個版本。本來想單獨處理繁體版本(和簡體版本有點不同),我的機器和VS.NET都是簡體中文版本的,把頁面文件轉換為big5的(保存時要求存為Unicode),結果無論是設定頁面的Charset,或設定responseEncoding="big5",或是在程式碼中設定Response.ContentEncoding,Response.Charset,顯示時都是亂碼。 (到現在我還不知道該如何處理,如果有哪位大蝦知道的請賜教,謝謝!)
最後,沒有辦法了,在網上查了些資料,終於採用了一種比較笨的方法:把簡體中文網頁的轉換為繁體再輸出。以下是具體的實作方法,來自網路上搜尋到的資料:
在頁面的Page_Load中設定Response.Filter:
Response.ContentEncoding = Encoding.GetEncoding(936); //936 – 簡體中文CodePage
Response.Filter = new GB2BIG5Filter(Response.Filter);
Response.Charset = “big5”;
其中GB2BIG5Filter的原始碼如下:
public class GB2BIG5Filter : Stream
{
private Stream _sink;
private long _position;
private const string _sGB=@"皚礙愛襖奧壩罷擺敗頒辦絆幫綁鎊剝飽寶報鮑輩貝鋇狽備 繃筆畢斃幣閉邊編貶辯辮標鱔別癟瀕濱賓擯餅並撥缽鉑駁卜補財參蠶殘慚慘燦蒼艙倉滄廁側冊測層詬攙摻蟬饞諂纏鏟產闡述顫動場嚐長償腸廠暢鈔車徹塵陳襯撐稱懲誠驍痴遲馳恥齒熾沖蟲寵疇躊籌綢醜櫥廚鋤雛驒觸處傳瘡闖創錘純綽辭詞賜聰蔥煙囪從叢湊躥竄錯達帶貸擔單鄲撣膽憚誕彈當擋黨蕩檔搗島禱導盜燈鄧敵滌遞締顛點墊電淀釣調諜疊釘頂錠訂丟東動棟凍鬥犢獨讀賭鍍鍛造緞兌隊對噸頓鈍奪墮鵝額訥惡餓兒爾餌貳發罰閥琺礬釩煩範販飯訪紡飛、廢費紛墳奮憤糞豐楓鋒風瘋馮縫諷鳳膚輻撫輔賦復負訃告該鈣蓋幹趕稈岡剛鋼綱崗鎬擱鴿閣鉻個給龔宮鞏貢鉤溝構購夠蠱顧剮掛關觀館慣貫廣規矽歸龜閨軌詭櫃貴劊輥滾鍋國過駭韓漢號閻鶴賀橫轟鴻紅後壺護滬戶嘩華畫劃話懷壞歡環還緩換喚癱瘓煥渙黃謊揮輝毀賄穢會燴概括軄繪襤褸渾夥獲貨禍擊機積飢跡袥雞績緝極輯級擠幾薊劑濟計記際繼紀夾莢頰賈鉀價駕殲監堅纈間艱緘繭檢鹼硞揀撿簡儉減薦門檻鑑踐賤見鍵艦劍餞漸濺澗將漿蔣槳獎講醬膠澆驕嬌攪鉸矯僥倖餃繳絞轎較階節傑潔結誡屆緊錦僅謹進晉燼盡勁荊莖鯨驚經頸靜鏡徑痙競淨糾厩舊駒舉據鋸懼劇鵑絹覺決訣絕鈞軍駿開凱顆殼課墾懇摳庫褲誇塊儈寬礦曠況虧巋窺饋潰擴闊蠟臘萊來賴藍欄攔籃闌蘭瀾讕攬覽懶纜爛濫撈勞澇樂鐳壘類淚籬離裡鯉禮麗厲勵礫歷瀝隸倆聯蓮連鐮憐漣簾斂臉鏈戀煉練糧涼兩輛諒療遼鐐獵臨鄰鱗凜期齡鈴凌靈嶺領餾劉龍聾的籠壟斷隴樓婁摟簣蘆盧顱廬爐"
+"擄鹵虜魯收祿錄陸驢呂鋁情侶屢縷慮濾綠巒攣孿滄亂掄輪倫崙淪綸論蘿羅邏鑼媽瑪碼螞蟻罵嗎買麥賣邁脈瞞饅蠻滿諦貓錨鉚貿麼黴沒鎂門悶們錳夢謎彌覓食冪綿緬廟滅憫閩鳴銘謬謀畝鈉納難撓腦惱鬧餒內擬膩攆捻釀鳥聶嚙鐓鎳檸獰寧擰泥濘鈕紐膿濃農瘧諾歐鷗毆嘔漚盤龐拋賠噴鵬騙飄頻貧蘋憑評潑頗撲鋪樸譜棲淒臍齊騎廄啟氣棄証牽扦鉛遷出謙錢鉗潛淺狸塹槍嗆牆薔強搶鍬橋喬僑翹竅竊欽親寢輕氫傾公頃請慶瓊窮趨區軀驅齲齙權勸卻鵲確讓饒擾動繞熱韌認縫紉榮絨軟銳閏潤灑薩鰓賽叁傘喪騷掃澀殺紗篩曬刪閃陝趙繕傷賞燒紹賒攝懾設紳審嬸腎滲聲繩勝聖師獅濕詩屍時蝕實識駛勢適釋飾視試壽獸樞輸書贖屬術樹豎數帥雙誰稅順說碩爍絲飼聳慫頌訟誦擻蘇訴肅雖隨綏歲孫損筍縮瑣鎖獺撻態攤貪癱灘壇譚談嘆湯燙濤綏討騰謄銻題體抽屜條貼鐵廳聽烴銅統頭禿鷹塗團頹蛻鴯馱駝橢窪襪彎灣頑萬網韋違圍為濰維葦偉偽緯謂衛溫聞紋穩問甕撾蝸渦窩臥嗚鎢烏污詬無蕪吳塢霧務誤錫祭祀銑戲細蝦轄峽俠狹廈嚇鮮纖鹹賢銜閒顯險現獻縣餡羨慕憲線廂鑲鄉詳響項蕭囂銷曉嘯蠍協挾攜脅迫寫瀉謝鋅挑釁興洶銹繡虛噓須許敘緒續軒懸選癬綏學勳詢尋馴訓訊遜壓鴉鴨啞亞 閹煙鹽嚴顏閻艷厭硯彥諺驗鴯楊揚潰瘍陽癢養樣瑤搖堯遙窯藥爺頁業葉醫銥頤遺儀蟻藝億憶詣議誼譯異繹蔭陰銀飲隱櫻嬰鷹應纓葩營螢蠅贏穎劦擁傭癰踴詠湧優憂郵鈾猶誘誘魚漁娛與嶼語籲籲獄譽預測鴛淵轅園員圓緣遠願約躍鑰岳礪悅閱雲鄖勻隕運蘊醞釀韻雜災載攢暫贊趙臟鑿棗責擇則澤賊贈扎"
+"札軋銠閘柵詐齋債氈盞斬輒嶄棧戰綻張漲帳賬脹趙蟄轍鍺這貞針偵查鎮陣掙睜簍爭幀鄭證織職執紙摯擲幟質滯鐘終種腫眾詌軸皺晝驟豬諸詛燭矚目囑咐貯鑄築駐專磚轉賺樁莊裝妝壯狀錐贛墜綴諦著濁茲資漬蹤綜總縱鄒詛組鑽亙羋吝嗇厙厴靨贗匭匱賾剄劌剴傴倀伕貞匭瑋儷儴儷儒儻儷儷訥詂訶詆詔詔詔詔詔謔詔詔詔諦諦諦諦諦諦諦諨諦諢諦諦諦諤諤諤諤諤諤諉諯諦諫謔卺陘隉鄺鄔郟鄶鄆酈芻奐勱巰堊壙壢壚埡塏塒堝塤薌藶莧莧苧葋茒蒞葋 你犖譁茒萵獍獍蒞葩蒞葩蒞葩蒞瑋葩蔣蒴蒟蒴蕆蕢蔞驀蘺蕷蘞藺蘄藪藻幬幘幗崎嶇嵐嵐嶧嶠嶇嶗崍嶸嵛嶁巔徠獷獪狽嶮嶸嵛嶁巔徠獷獪狽鑀饑鑀酈鄒鑀鑀惻愷惲慳愜慍憒懍閂闍闥閎閔閔閔闐閫闍閔閾閔滻閔閼闃闋閔閔鶺灑涇浬浬涇浬涇浬灑灩灄瀅瀅瀠瀟瀲瀦瀨灝騫迳邐屨弳嫵嫗媯姍婭嬈孌媧嫻嬋媼嬡嬪嬙嬤馱駟駙騶驛驍骉騸騪驤紆紂紇紈纊紜紕紓紺綺綺綹綋絀絎綺綹綺綹緲縹縕縕縹緲綺縵縹縵縹緲縵縹緸繫縹緲撩繒纓繰緳纘璣瑋珏瓏頊璽琿璉璦瓔璇瓚韙韞韜榪櫪棖梟梟櫛榿榿櫤櫸檳檣檣櫫櫓櫞簷檁歿殕殞殮殫殯軄軛軻轤軒轅轙謔澗澗萙輙覬榿澗搙嵐萙嵐萙嵐萙務
+"貲贗贐賑賚賒質賧賻覬覦覦覦覦譨賒葞葩櫫櫞櫫摓揣脻甁焁焁焁不是鄷愜愜愜愁瑣甄愜焜焜脆焒瑋癆脆焒種癆癆甕焁焒秌你禎禪懟愨愍懣戇沓涇磯碭硨礪硹硤硃磧磣龕青睞畬罈羈钆釔釙鈞鈳鈳鈳鈳鈦钆釔釙鈒鈒鈒鈒鍆鈞鈸鈸鈰鉉鉈鉍鈮鈹銪銬銠銣銪銪銦銠銣銪錕錆錛錁錕錢錈錟錙鍥鍇鍶鍔鍤鎪鍰鏤鏘鏌鎘鐫鎦鎰鎵鑌鏢鏜鏝鏍鏞鏃鏇鏑鐔镤鐓鑭镨鏹鐙鑊鐲鐿鑣鍾穡鳩鳶鴇鴆鴣鶇鸕鴝鴟鷥鴯鷙鴰鵂鸞鵓鸝鷂鸚鷓鷦鷯鷥鷥鷙鷥鷙癬癬癬噙噙襤襁褓皸耬聹聵頇頦頡頦頷顎頦頦頦馦馥覦覦馦覦木覦覦覦覦榥覦覦覦-覦覦-覥覦覦規諦誫達。裊羥糝緹麩趲釅釃鶇躉蹌蹠躒覷蹕躚躋躓踕躉躥覬覦靚靂霽靄龔齙齙龔齙齦齙龔齙齙齅鮒鱟鮐鮚鱔鮞鱭鮫鯗鱘鯁鱺鰱鰹鰣鰷鯀鯊鯇鯽鯖鯪鯫鯡鯤鯧鯢鯰鯛鯔鰈鱷鰍鰒鰉鰲鰭鰨鰥鰩鳓鰾鱈鰻鱖鱔鱒鱧韃韉鶻髏髖髕魘魎颯饜鬢黷黪鷯";
private const string _tGB=@"皚藹礙愛襖奧壩罷擺敗頒辦絆幫綁鎊誹謗剝飽寶報鮑輩貝鋇狽備繃筆畢斃幣閉邊編貶變辯辮標鱉別癟瀕濱賓擯餅並撥缽鉑駁蹟補財參蠶殘慚慘燦蒼艙倉滄廁側冊測層詫攙摻蟬饞讒纏鏟產闡顫場嘗長償腸廠暢鈔車徹塵陳襯撐稱懲誠騁癡遲馳恥齒熾沖蟲寵躊籌綢醜櫥廚鋤雛該儲觸處傳瘡闖創錘純綽辭詞賜聰蔥囪從叢湊躥竄錯達帶貸擔單鄲撣膽憚誕彈當擋黨蕩檔搗島禱導盜燈鄧敵滌遞締顛點墊電淀釣調諜疊釘頂錠訂丟東動棟凍鬥犢獨讀賭鍍鍛斷緞兌隊對噸頓鈍奪墮鵝額訛惡餓兒爾餌貳發罰閥琺礬釩煩範販飯訪紡飛廢費紛墳奮憤糞豐楓鋒風瘋馮縫諷鳳膚質撫輔賦複負訃告該鈣蓋幹趕稈贛岡剛鋼綱崗鎬擱鴿閣鉻個給龔宮鞏貢鉤溝構購夠蠱顧剮掛關觀館慣貫廣規矽歸龜閨軌詭櫃貴劊輥滾鍋國過駭韓漢號閡鶴賀橫轟鴻紅後壺護滬戶嘩華畫劃話懷壞歡環還緩換喚ṣ煥渙黃謊揮輝毀賄穢物燴彙誨繪葷渾夥獲貨禍擊機積饑跡譏雞績緝極輯級擠幾薊劑濟計記際繼紀夾莢頰賈鉀價駕殲監堅箋間艱緘繭檢堿鹼揀撿簡儉減薦疇鑒踐賤見鍵艦劍餞漸濺澗將漿蔣槳獎講醬膠澆驕嬌攪鉸矯僥腳餃繳絞轎較階節傑潔結誡屆緊錦僅謹進晉燼盡勁荊莖鯨驚經頸靜鏡徑痙競淨糾廄舊駒舉據鋸懼劇鵑絹覺決訣絕鈞軍駿開凱顆殼課墾懇摳庫褲誇塊儈寬礦曠況虧巋窺饋潰擴闊蠟臘萊來賴藍欄攔籃闌蘭瀾訥攬覽懶纜爛濫撈勞澇樂鐳壘類淚籬離裏鯉禮麗厲勵礫曆瀝隸倆聯蓮連鐮憐漣簾斂臉鏈戀煉練糧涼兩輛諒療遼鐐獵臨鄰鱗凜的齡鈴淩靈嶺領餾劉龍聾語句壟攏隴樓婁簍蘆盧顱廬爐"
+"擄鹵虜魯擎祿錄陸驢呂鋁燻屢縷慮濾綠巒攣孿灤亂掄輪倫侖淪綸論蘿羅邏中花籮騾駱絡媽巒馬罵嗎買麥賣邁脈瞞饅蠻滿謾貓錨鉚貿麼黴沒鎂門悶們錳夢謎彌覓冪綿緬廟滅憫閩鳴銘謬謀畝鈉納難撓腦惱鬧餒內擬膩攢撚釀鳥聶齧鑷鎳檸獰甯擰生存鈕紐膿濃農瘧諾歐鷗毆嘔漚盤龐拋賠噴鵬騙飄頻貧蘋憑評潑頗撲鋪樸譜棲淒臍齊騎豈啟氣棄訖牽扡鉛遷簽謙錢鉗潛淺煌塹槍嗆牆薔強搶鍬橋喬僑翹竅竊欽親寢輕氫傾頃請慶瓊窮趨區軀驅齲顴權勸卻鵲確讓饒擾繞熱韌認ṣ榮絨軟銳閏潤灑薩鰓賽三傘喪騷掃澀殺紗篩曬刪閃陝贍繕傷賞燒紹賒攝懾設紳審嬸腎滲聲繩勝聖師獅濕詩屍時蝕實識駛勢適釋飾視試壽獸樞輸書贖屬術樹豎數帥雙誰稅順說碩爍絲飼聳慫頌訟誦擻蘇訴肅雖隨綏歲孫損筍縮瑣鎖獺撻態攤貪癱灘壇譚談歎湯燙濤絛討騰謄銻題體屜條貼鐵廳聽烴銅統頭禿圖塗團頹蛻脫鴕馱駝橢窪襪彎灣頑萬網韋違圍為濰維葦偉偽緯謂衛溫聞紋穩問甕撾蝸渦窩臥嗚鎢烏汙誣無蕪吳塢霧務誤錫崙襲習銑戲細蝦轄峽俠狹廈嚇鮮纖鹹賢銜閑顯險現獻縣餡羨憲線廂鑲鄉詳響項蕭囂銷曉嘯蠍協挾脅諧寫瀉謝鋅跋興洶鏽繡虛噓須許敘緒續軒懸選癬絢學勳詢尋馴訓訊遜壓鴉鴨啞亞談話閹煙鹽嚴顏閻豔厭硯彥諺驗鴦楊揚腫陽癢養樣瑤搖堯遙窯謠藥爺頁業葉醫銥頤遺儀蟻藝億憶義詣議誼譯異繹蔭陰銀飲隱櫻嬰鷹應纓瑩螢營熒蠅贏穎喲擁傭癰踴詠湧優憂郵鈾猶誘輿魚漁娛與嶼語籲禦獄譽預蠅鴛淵軒園員圓緣遠願約躍鑰嶽粵悅閱雲鄖勻隕運蘊媚暈韻雜災載攢暫贊贓臟鑿棗責擇則澤賊贈紮"
+"劄軋鍘閘柵詐齋債氈盞斬輾嶄棧戰綻張漲帳賬脹趙蟄轍鍺這貞針偵診鎮陣掙睜猙爭幀鄭證織職執紙摯擲幟質滯鍾終種腫眾謅軸皺晝驟豬諸誅燭囑貯鑄築駐專磚轉賺樁莊裝妝壯狀錐贅墜綴諄著濁茲資漬踪綜總縱鄒詛組鑽亙羋詠厙厴靨贗匭匱賾剄劌剴傴倀傖隊列儂儔儼儷俁僨傯僂儻儐儒妌和儴儷詒誆誄詰詰詼謔詰詬病諂諢詡誚諦諦諦謔覦覦覦覦覦覦覦覦榥澇諦覦覦覦榎諦諦噬噬噬嶽噬嶙噬噬嶽噬嶙噬噬噬嶽噬嶙噃噬嶙噬噬嶙噬嶙巹陘隉鄺鄔鄴郟鄶鄆酈芻奐勱巰堊壙壢壚埡塏塒堀葩藶莧萇蓯苧荢蔦塋瑋瑋瑋瑋躓薺瑍瑩甙葩甙葩甕小羍甕一樣。蘺蹺蘞藺蘄藪蘚奩的捫摶撟摑摜撳攄攖徠噎嘜嘸囈嚦唄嚀噠嗐峴嵐嶧嶠崢嶗崍嶸崳嶁巔徠獷獪猻獫瑩獼餳飩餼 飫飭飴餉餑餘餛飩澇澇澇澇摙螅綺咦榿愷澇澇澇澇摙澇澇澇澇澨樸櫦愨慳愜慍憒懍閂閻閩閎閔閌闥閭閫鬮閔閾閔闕澗閩閔閔鏨澇澇澇澇晙嶙瀅潷瀠瀟瀲瀦瀨灝騫邇邐屨弳嫵嫗媯姍婭嬈孌媧嫻嬋媼嬡嬪嬙嬤駔駦駙騶馿鑭馱馱馦馦馥馿馦馦馥馿馱馦馦馦馥馱鑩馱馦馦馿鑫馦馦馦馥馦馿髨馫馦馦馥馦馦馦馿髫馦馦馥馦馦馦馿髫馦馦馦馦馥馦馿髫馦馦馦馦馥馦馦馿髫馦馦馦馦馥馦馦馿酒紆紂紇紈纊紜紕紓紺絏紱縐紼絀絎絳綆綃綈綾綺緋緄綞綬綹綣綰緇緙緗緹緸繚繒繾繰繯纘璣瑋玨瓏頊璽琿璉璦瓔璿瓚韙韞韜榪櫪棖樅梟櫗櫬櫪檣櫫櫓櫞簷檁歿殤殤殞殫殯軔軛軻轤軷躓躡萓滄澔輅輅躓輦輞焨愷瑩櫦榿榿溿”
+"貲賅贐賑賚賕賁賧覘覬覡覿覦諦跂賁諞諦覬覦覦覦覦覦榹榿氬氍牘澇脛膾膕餺甙甙餺顰馦懟愨湣懣戇遝澩磯碭硨礪礱硤磽磧磣龕睞瞼佘羆羈釓釔釙釗釹鈞鈰鈞鈰鈰鈰鈰結果結果鈰結果結果結果結果結果結果結果鈶鈹鉞鉬鉭鈿鑠鈰鉉鉈鉍鈮鈹鐸銬銠鉺銪鋮鋏鐃鐺銦鎧銖鋌銩鏵銓鉿鎩銚錚銫銃鐋銨銣鐒錸鋱鏗鋰鋯鋨銼鋝鋃鋟鋦錒錆錛錁錕錮錈錟錙鍥鍇鍶鍔鍤鎪鍰鏤鏘鏌鎘鐫鎦鎰鎵鑌鏢鏜鏝鏍鏞鏃鏇鏑鐔鏷鐓鑭鐠鏹鐙鑊鐲鐿鑣鍾穡鳩鳶鴇鴆鴣鶇鸕鴝鴟鷥鴯鷙鴰鴒鸞鵓鸝鳩鴒鴒鴝鴒鴞鶓鴣鴝鳩鷯鷦鷲鷸鸛癤癘癧癁癔癔癔甙甙甙頇頎頏頡頜頦頷顎顓顳顢顙類諦諦蠆蠦頔蠣蟶蛺蟯螄蠐諦諦種種種種種種種種糝縶麩趲釅釃鹺躉蹌蹠躒蹺躓躚躋躓躑躡躉躦覦覦覦踹霽靄齔齜齙鑞鑩靬霽靄齜齙鑞鑩齙鑭齙鑞齙鑞鑙齙鑞鑙鑙鑞鑙鑙鑽鑽鑽鑙鑽鑙鑽鱸鑽鑞鑙鑞鑙鑽鑽鑽鱸鑽鑞鑽鑽鑽鑽鑽鑽铽鋩鈾鮐鮚鮪鮞鱭鮫鯕鱘鯁鱺鰱鰹鰣鰷鯀鯊鯕鯽鯖鯪鯤鯧鯢鯰鯛鯔鰈鱷鰍鰈鰉鰥鰈鰩鰨鰍鯰鰩鱷鰩鰷魚鰩鰷魚鰩魚鰩鰍鰍鰷魎饗鬢鬢黷黲鼴";
public GB2BIG5Filter(Stream sink)
{
_sink = sink;
}
// The following members of Stream must be overriden.
public override bool CanRead
{
get { return true; }
}
public override bool CanSeek
{
get { return true; }
}
public override bool CanWrite
{
get { return true; }
}
public override long Length
{
get { return 0; }
}
public override long Position
{
get { return _position; }
set { _position = 值; }
}
public override long Seek(long offset, System.IO.SeekOrigin direction)
{
return _sink.Seek(offset, direction);
}
public override void SetLength(long length)
{
_sink.SetLength(length);
}
public override void Close()
{
_sink.Close();
}
public override void Flush()
{
_sink.Flush();
}
public override int Read(byte[] buffer, int offset, int count)
{
return _sink.Read(buffer, offset, count);
}
//GB2312 936
//Big5 950
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(950);
_sink.Write(e.GetBytes(str), 0, e.GetByteCount(str));
}
}
(End)