2011-11-01 71 views
2

工作我使用UTF8不是我的.NET代碼在Excel

byte[] bytesToSend = System.Text.Encoding.UTF8.GetBytes(partialtorender); 

那麼M以創作它練成

文本中的「印地文」語言即將胡言亂語所產生的excel,你可以請建議做什麼?

System.IO.MemoryStream memStr = new System.IO.MemoryStream(); 

memStr.Write(bytesToSend, 0, bytesToSend.Length); 

memStr.Position = 0; 

FileStreamResult result1 = new FileStreamResult(memStr, "application/ms-excel"); 

Response.AddHeader("content-disposition", "attachment; filename=" + "newExcelSheet" + ".xls"); 

return result1; 
+1

你沒有向你展示如何在Excel中編寫它,或者你是否以任何方式告訴Excel它是否是UTF-8數據,形狀或形式...... –

+1

你可以展示更多的代碼嗎?您發佈的行只能將您的UTF-8字符串轉換爲字節數組。沒有問題:-) –

+0

代碼已添加,請檢查一下 – 1Mayur

回答

9

嘗試發出一個UTF-8前導碼,以向Excel指出正確的編碼。 .xls也是一種專有的二進制格式。你不能像你的代碼一樣使用字符串變量。

下面是一個例子與CSV文件導出:

public ActionResult Index() 
{ 
    var csv = "मानक हिन्दी;some other value"; 
    var data = Encoding.UTF8.GetBytes(csv); 
    data = Encoding.UTF8.GetPreamble().Concat(data).ToArray(); 
    var cd = new ContentDisposition 
    { 
     Inline = false, 
     FileName = "newExcelSheet.csv" 
    }; 
    Response.AddHeader("Content-Disposition", cd.ToString()); 
    return File(data, "text/csv"); 
} 
+0

隨着代碼的一些小的修復,它的工作就像一個魅力。 謝謝季米特洛夫 – 1Mayur

0

你的問題可能是對XLS文件的默認編碼是 UTF-8。請保存你得到的文件,並根據這篇文章打開它:Choose an encoding standard when you open a file 這是否解決了你的問題?

+0

這並不能解決問題。我曾嘗試過這樣做。 我正在使用Ms Office 2010 ...是否會產生問題? – 1Mayur

+0

主要問題是,您沒有顯示生成xls內容的代碼。你是否使用互操作程序集創建了一個xls文件?如果是這樣 - 爲什麼不創建一個xlsx文件? –

+0

我們重試FileStreamResult 希望現在很清楚 – 1Mayur

0

我發現了很多的鬥爭後的溶液。 如果你看看xls文件的文本,你會發現它不是一個格式良好的html,無論如何,excel處理它。 但我想我應該讓excel知道它是utf-8。所以我用:

Response.Write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/>"); 

在寫入其餘的流之前,它確實工作!