西里尔字符的csv文件编码

Evg*_*vin 1 csv asp.net-mvc encoding

我使用下一个代码从我的日志表生成.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"));
}
Run Code Online (Sandbox Code Playgroud)

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

Dar*_*rov 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");
Run Code Online (Sandbox Code Playgroud)

此外,您似乎正在使用\n哪个不是Windows上正确的新行分隔符,并且您似乎没有在foreach循环中追加新行,因此所有内容都将位于同一行,从而导致CSV文件无效.拜托,请不要滚动你自己的CSV解析器.