要將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)
沒有留言:
張貼留言