2007年8月9日 星期四

Asp.net轉Excel中文亂碼問題

要將CrystalReport資料轉成Excel時,轉出後的中文字會變成亂碼。下面為先前會造成亂碼的程式:


Response.Clear();

Response.AddHeader( "Content-Disposition",
"attachment;filename=VisitReport.xls" );

Response.ContentType = "application/vnd.ms-excel";


Response.Write("<html><body>");

ResponseReportOnly(dgReport );

Response.Write("</body></html>");

Response.End();


其實,只要多加一行,就可以解決


Response.Clear();

Response.AddHeader( "Content-Disposition",
"attachment;filename=VisitReport.xls" );

Response.ContentType = "application/vnd.ms-excel";


Response.ContentEncoding=System.Text.Encoding.GetEncoding("Big5");


Response.Write("<html><body>");

ResponseReportOnly(dgReport );

Response.Write("</body></html>");

Response.End();


 


另一個解法,(比較好): source ~   http://www.neo.com.tw/archives/000243.html



因為從 Windows 2000 之後的作業系統在檔案處理採用Unicode ,所以 .Net 的檔案處理也是預設為 Unicode
,但是文字檔大多還是以 ANSI 儲存,而且裡面的編碼還是用 Big5,所以才會造成中文亂碼的狀況,也就是在讀取檔案的時候就要指定編碼的樣式。


本來會造成亂碼的語法如下:


Dim reader As StreamReader =

New StreamReader(FileName)


但是問題來了,System.Text.Encoding 裡面一堆,ASCII、UTF-8 等等的,要選哪個好?


其實很簡單,用 System.Text.Encoding.Default 告訴 StreamReader 目前作業系統的編碼即可。


[VB .Net] 的寫法


Dim reader As StreamReader = _

New StreamReader(FileName, System.Text.Encoding.Default)


[C# .Net] 的寫法


StreamReader reader = _

New StreamReader(FileName, System.Text.Encoding.Default)


沒有留言:

張貼留言