2011-11-01 73 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\"/>"); 

在写入其余的流之前,它确实工作!