Asp.net mvc 西里尔文字符的csv文件编码

Asp.net mvc 西里尔文字符的csv文件编码,asp.net-mvc,encoding,csv,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(logRe

我使用下一个代码从日志表生成.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编码。我应该使用什么编码,或者应该做什么更改?

您可以使用带前导的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文件。请,请,请。

您可以使用带有序言的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文件。请,请,请,.

对于要编码的字符串,我从它们中删除字符“,”和“”。这足够吗?您在回答帮助中链接的帮助程序可以生成(而不是解析).csv文件吗?非常好的回答,感谢您提到这一点。我刚刚成功地使用它使斯堪的纳维亚字符工作。对于要编码的字符串,我删除字符“,”和“””他说。够了吗?您在答案帮助中链接的帮助程序可以生成(而不是解析).csv文件吗?非常好的答案,感谢您提到这一点。我只是用它成功地让斯堪的纳维亚人也能工作。