我使用下一代码从我的日志表中生成.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编码还是应该做哪些更改?
答案 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。