西里尔字符的csv文件编码

时间:2012-03-02 18:31:32

标签: asp.net-mvc encoding csv

我使用下一代码从我的日志表中生成.csv文件。

public ActionResult Index()
{
var records = loggingService.GetLogRecords(model.Since, model.For);

var mainSb = new StringBuilder();
mainSb.Append("Date,User name\n");

foreach (var logRecord in records)
{
    mainSb.Append(logRecord.Time.ToString("dd/MM/yyyy hh:mm:ss")).Append(",");
    mainSb.Append("\"").Append(logRecord.UserName ?? "").Append("\"").Append(",");
}
return File(Encoding.Unicode.GetBytes(mainSb.ToString()), "text/csv", string.Format("logs.csv"));
}

用户名包含西里尔字符,当我打开.csv文件时 - 显示的是西里尔字符。我也尝试使用UTF8和UTF32编码。我应该使用Whan编码还是应该做哪些更改?

1 个答案:

答案 0 :(得分:12)

您可以将UTF-8与前导码一起使用。最后尝试这样:

var data = Encoding.UTF8.GetBytes(mainSb.ToString());
var result = Encoding.UTF8.GetPreamble().Concat(data).ToArray();
return File(result, "text/csv", "logs.csv");

此外,您似乎正在使用\n,这不是Windows上正确的新行分隔符,并且您似乎没有在foreach循环中追加新行,因此所有内容都将在同一行中生成CSV文件无效。拜托,请do not roll your own CSV parser