2012-03-02 54 views
1

我使用下一个代码从我的日志表中生成.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编码还是应该做什么改变?

回答

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

+0

对于字符串进行编码,我从他们中删除字符','和'''是否够用吗?可以帮助您链接回答帮助生成(不解析).csv文件吗? – 2012-03-04 20:14:04

+0

非常好的答案,谢谢你提到这个。我只是成功地使用它来让斯堪的纳维亚人物也能工作。 – MEMark 2013-10-05 10:04:20