C# UTF8在Excel中不工作
在我使用的.net代码中C# UTF8在Excel中不工作,c#,.net,asp.net-mvc,excel,C#,.net,Asp.net Mvc,Excel,在我使用的.net代码中 byte[] bytesToSend = System.Text.Encoding.UTF8.GetBytes(partialtorender); 然后我把它写成excel “印地语”文本在生成的excel中变得乱七八糟,你能建议怎么做吗 System.IO.MemoryStream memStr = new System.IO.MemoryStream(); memStr.Write(bytesToSend, 0, bytesToSend.Length); m
byte[] bytesToSend = System.Text.Encoding.UTF8.GetBytes(partialtorender);
然后我把它写成excel
“印地语”文本在生成的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;
您的问题可能是XLS文件的默认编码是而不是UTF-8。请保存您获得的文件并根据以下帖子打开:
这是否解决了您的问题?尝试发出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");
}
经过一番努力,我找到了解决办法。 如果您查看xls文件的文本,您会发现它不是格式良好的html,无论如何excel都会处理它。 但我想我应该让excel知道它是utf-8。所以我用了:
Response.Write("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=UTF-8\"/>");
Response.Write(“”);
在写入流的其余部分之前,它确实有效 您还没有展示如何在Excel中编写它,或者您是否以任何方式、形状或形式告诉Excel它是UTF-8数据……您能展示更多的代码吗?您发布的行仅将UTF-8字符串转换为字节数组。没有问题:-)这个
partialtorender
变量是什么?HTML,CSV,…@msirwani,是的,我知道它是一个字符串变量。但它的内容是什么?您知道xls
文件是具有专有格式的二进制文件。为了生成xls文件,您可能需要使用Office Interop。这并不能解决此问题。我以前试过这样做。我正在使用Ms Office 2010。。。这是否会产生问题??主要问题是,您没有显示生成xls内容的代码。是否使用互操作程序集创建xls文件?如果是这样的话,为什么不创建一个xlsx文件呢?正如达林·迪米特罗夫所问:内容是如何生成的?如何创建最终应该是Excel工作表的字符串?在代码中进行了一些小的修改,它就像一个符咒。感谢DimitrovDo,您还有一个问题,即使用Excel打开和保存此csv会将csv转换为以空格分隔的格式,而不是“;”格式分隔?