這是今天遇到的問題,沒時間完全解開謎團,僅記載處理經過如下:

同事使用VS2008中文版,以VS2008 Web Deployment Project將其編譯成DLL上傳至測試機,發現其中有一段"SELECT Col1, CASE WHEN Col2=1 THEN '中文一' ELSE '中文二' END As ColX FROM ..."的PL/SQL語法,查詢結果在網頁上的呈現,Col1正常顯示,ColX則出現三個問號(?)

原以為是.cs編碼問題,將aspx/aspx.cs都Copy至測試台,不使用bin下編譯好的DLL。此時將.cs試改存BIG5及UTF-8都得到一樣結果,我立劇將槍口改瞄右上角,碰! 打下一枚茶包--Registry HOME0的NLS_LANG未設成中文。(註: 改完要IISRESET才會生效)

本以為問題已解,但同事將ASPX再改回使用編譯過的DLL,ColX雖不再是問號,卻出現亂碼,看來.cs的Encoding還是有問題。

找不到Web Delpoyment Project設定File Encoding地方,求其次在ASP.NET web.config中加入globalization設定: <globalization fileEncoding="utf-8" requestEncoding="utf-8" responseEncoding="utf-8"  />

重Build DLL後問題排除~~~

只是我查到ScottGu網站上有相關討論:

private static void FixWebSourceFile(FileInfo file, Hashtable assemblyMapping)
{
    ....
    using (StreamReader reader1 = new StreamReader(file.FullName, true))
    {    
        text1 = reader1.ReadToEnd();
        encoding1 = reader1.CurrentEncoding;
    }
    ....

由此推論aspnet_merge.exe應會在讀檔時自動決定編碼,為何加入web.config globalization設定可以解決問題,這部分暫無合理解釋。


Comments

# by Alex So

在中文前加 "N" 是不是可以解決你的亂碼問題呢? "SELECT Col1, CASE WHEN Col2=1 THEN N'中文一' ELSE N'中文二' END As ColX FROM ......"

# by Jeffrey

to Alex So, 加N多半用來解決"BIG5有的中文字正常,Unicode難字變問號"的情形(參考: http://bit.ly/bMEAps ),當BIG5有的中文字也變問號時,多半是Oracle Client的編碼設定不吻合。以上經驗供參考。

# by 林凱西

請問站長有興趣寫試用文嗎?懇請回覆,我將提供更詳細的訊息~^^ telmotosky702681@kimo.com

Post a comment