2012-12-31 49 views
0

我正在使用以下代碼將內容導出到.cvs文件 ,它們也支持中文和japanes字符。導出中文,japanes字符在.csv文件中+ mvc3

public ActionResult Download(strng accnumber) 
{ 
    string csvContent = "東西,東西,東西, hi"; 
    var data = Encoding.UTF32.GetBytes(csvContent); 
    string filename = "CSV_" + accnumber + ".csv"; 
    return File(data, "text/csv", filename); 
} 

當我導出我的文件我沒有得到正確的中文或japanes字符。什麼不見​​了?

我已經使用UTF32編碼來支持它。

編輯

我注意到,在記事本中打開我的.csv文件顯示完美的人物,但MS-Excel的簡化版,。

+0

你能有下Excel選項一看,在部分高級有通用下一個按鈕Web選項...如果你能影響Excel使用比是你的機會編碼。我相信weboptions對話框也可以通過文件打開對話框中的工具按鈕進行導航。 – rene

+0

我試圖在weboptions下設置編碼爲Unicode(Big-Endian),但它不適用於我 – BrainCoder

回答

1

因爲你在asp.net服務該文件,你還必須處理http pipleline的編碼。我不早點發現,對不起。

而不是有一個普通的ActionResult你應該使用派生的ActionResults之一,我已經使用FileContentResult。請注意我正在構造的特殊ContentType以告訴瀏覽器一個UTF-32文件即將到來...

public ActionResult Download(string accnumber) 
{ 
     string csvContent = "東西,東西,東西, hi"; 
     var data = Encoding.UTF8.GetBytes(csvContent); 
     // add byte order mark 
     var bom = new byte[] { 0xEF, 0xBB, 0xBF }; 
     // hold it all 
     var all = new byte[bom.Length + data.Length]; 
     // copy over BOM 
     Array.Copy(bom, all, bom.Length); 
     // copy over data 
     Array.Copy(data, 0, all, bom.Length, data.Length); 

     string filename = "CSV_" + accnumber + ".csv"; 
     var file = new FileContentResult(all, "text/csv") 
     { 
      FileDownloadName = filename 
     }; 

     return file;  
} 
+0

我嘗試過通過更改'ContentType = text/csv; charset = UTF-32來解決您的問題,但不適用於我。 – BrainCoder

+0

記事本中的結果仍然可以嗎? – rene

+0

是在記事本中的結果是好的 – BrainCoder

0

我也遇到了這個問題。我通過在「返回文件」之前添加以下行來修復它:它適用於我。

Response.Write("<meta http-equiv=Content-Type content=text/html;charset=utf-8>"); 
return file; 
0

我也遇到同樣的問題,用UTF-8-BOM解決。

Encoding.UTF8.GetPreamble().Concat(Encoding.UTF8.GetBytes(stringData)).ToArray()