将unicode数据导出为CSV文件

时间:2015-08-04 09:21:12

标签: c# asp.net excel encoding export-to-csv

虽然许多人多次询问此问题,但我再次无法以正确的文本生成所需的CSV文件。我正在创建一个CSV文件,其中的字符是用日语设置的。每当我生成CSV文件时,它都不会以正确的编码方式导出它。我想让它在excel表中可读。它在调试时显示正确的数据,并且记事本显示正确的csv但是当我从Excel读取文件时,所有文本都搞砸了。

这是我的代码:

private void GenerateCSV(string[][] value)
    {
        string attachment = "attachment; filename=CreatedCSV.csv";

        HttpContext.Current.Response.Clear();
        HttpContext.Current.Response.ClearHeaders();
        HttpContext.Current.Response.ClearContent();
        HttpContext.Current.Response.AddHeader("content-disposition", attachment);
        HttpContext.Current.Response.ContentType = "text/csv";
        HttpContext.Current.Response.Charset = "";
        HttpContext.Current.Response.ContentEncoding = System.Text.Encoding.UTF8;
        HttpContext.Current.Response.BinaryWrite(System.Text.Encoding.UTF8.GetPreamble());

        string delimiter = ", ";
        int length = value.GetLength(0);
        StringBuilder sb = new StringBuilder();
        for (int index = 0; index < length; index++)
            sb.AppendLine(string.Join(delimiter, value[index]));

        HttpContext.Current.Response.Write(sb.ToString());
        HttpContext.Current.Response.End();
    }

我也尝试过实现unicode,但也没有帮助。我在这里缺少什么?

Excel文件如下所示: enter image description here

记事本正确显示数据如下: enter image description here

2 个答案:

答案 0 :(得分:0)

您的源字符串可能编码错误。 我们使用了您的代码,它使用特殊字符,但我们的字符串构建器使用以下代码以UTF8编码:

byte[] buffer = Encoding.UTF8.GetBytes(DataFeedCSV.ToString());

答案 1 :(得分:0)

StringBuilder sb = new StringBuilder();
sb.Append("pröva-Testing");
sb.Append("\r\n");
var data = Encoding.UTF8.GetBytes(sb.ToString());
var result = Encoding.UTF8.GetPreamble().Concat(data).ToArray();
return File(result, "application/csv", "foo.csv");

通过这些行,我认为Excel可以使用UTF-8对其进行编码,因为它知道它是utf8编码的csv