C#响应。写入CSV文件不会分割单元格

C#响应。写入CSV文件不会分割单元格,c#,asp.net,encoding,character-encoding,response.write,C#,Asp.net,Encoding,Character Encoding,Response.write,我有以下代码: context.Response.ClearHeaders(); context.Response.AddHeader("content-disposition", "attachment; filename=Clients.csv"); context.Response.ClearContent(); context.Response.ContentType = "application/ms-excel"; context.Respon

我有以下代码:

    context.Response.ClearHeaders();
    context.Response.AddHeader("content-disposition", "attachment; filename=Clients.csv");
    context.Response.ClearContent();
    context.Response.ContentType = "application/ms-excel";
    context.Response.ContentEncoding = System.Text.Encoding.Unicode;
    context.Response.BinaryWrite(System.Text.Encoding.Unicode.GetPreamble());
    context.Response.BufferOutput = false;
    context.Response.Buffer = false;

    foreach (var c in clients)
    {
        context.Response.Output.WriteLine(string.Format("{0},{1}", c.FirstName, c.LastName));
    }
下载的文件看起来不错,只是所有行单元格都合并到一个单元格中。 由于csv/xls内容中包含希伯来文和日文字符,因此我必须将响应用作BinaryWrite。 如何使用二进制写入方式写入分割单元csv/xls文件?

到:

Microsoft Excel将打开.csv文件,但具体取决于系统的 区域设置,它可能需要分号作为分隔符,而不是 逗号,因为在某些语言中逗号用作小数 分离器

因此,尽管它被称为逗号分隔值,但我认为您应该尝试使用分号而不是逗号

即使用:

context.Response.Output.WriteLine(
    string.Format("{0};{1}", c.FirstName, c.LastName));

最好的方法是在有逗号时用双引号将字符串括起来,以清理字符串,就像excel在保存csv文件时所做的那样