【问题标题】:csv file encoding for cyrillic characters西里尔字符的 csv 文件编码
【发布时间】:2012-03-02 18:31:32
【问题描述】:

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

【问题讨论】:

    标签: asp.net-mvc encoding csv


    【解决方案1】:

    您可以使用带有序言的 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

    【讨论】:

    • 对于要编码的字符串,我从它们中删除字符 ',' 和 '"'。够了吗?您在答案中链接的帮助者可以帮助生成(不解析).csv 文件吗?
    • 很好的答案,感谢您提及这一点。我刚刚成功地使用它来让斯堪的纳维亚字符也能正常工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-29
    • 2016-10-05
    • 1970-01-01
    • 2013-09-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多