【问题标题】:ASp.net core IActionResult csv encoding problemASp.net core IActionResult csv编码问题
【发布时间】:2021-02-09 12:40:16
【问题描述】:

我在尝试通过 IActionResult 保存 csv 文件时遇到问题。打开 csv 文件时,特殊字符(如 åøæ)将无法正确显示。我尝试了很多不同的方法,但似乎没有任何效果。我最近的尝试是尝试使用 CsvHelper 库,但似乎也不起作用。这是我最近的尝试。

        byte[] result;
        await using (var memoryStream = new MemoryStream())
        await using (var streamWriter = new StreamWriter(memoryStream, new UTF8Encoding(true)))
        {
            var csvWriter = new CsvWriter(streamWriter, CultureInfo.InvariantCulture);
            csvWriter.Configuration.Delimiter = ";";
            await csvWriter.WriteRecordsAsync(data);
            await streamWriter.FlushAsync();
            result = memoryStream.ToArray();
        }

        return new FileStreamResult(new MemoryStream(result), "text/csv")
        { FileDownloadName = $"data.csv" };

希望有人能帮助我,在此先感谢。

【问题讨论】:

  • 有什么更新吗?我的回复对你有帮助吗?
  • 我发现问题不是我的 ActionResult,而是我同事打的 ajax 调用。它可以将 window.location.href 直接更改为我的操作结果。但这会造成超时,因为这是一个缓慢的调用。

标签: c# excel csv encoding asp.net-core-mvc


【解决方案1】:

据我所知,此问题与 Excel 而非 asp.net 核心应用程序有关。我们可以设置下载文件格式使用utf-8,但是excel不能以正确的格式打开。

您可以打开您的 csv 文件,发现它显示如下:

但是excel显示是这样的:

要强制excel显示特殊字符,你应该按照以下步骤:

1.打开Excel新建一个空的excel

2.使用数据导入数据-->导入外部数据-->导入数据

3.选择“csv”文件类型并浏览到您的文件

4.在导入向导中将 File_Origin 更改为“65001 UTF”(或选择正确的语言字符标识符)

5.将分隔符改为逗号

6.选择导入位置并完成

生成 csv 代码:

          List<Student> students = new List<Student>
{
    new Student { Id = 1, FirstName = "éåæÉà;some other value", LastName = "Kanjilal" },
    new Student { Id = 2, FirstName = "Steve", LastName = "Smith" },
    new Student { Id = 3, FirstName = "Anand", LastName = "Narayaswamy"}
};
            try
            {
                StringBuilder stringBuilder = new StringBuilder();
                stringBuilder.AppendLine("Id,FirstName,LastName");
                foreach (var student in students)
                {
                    stringBuilder.AppendLine($"{student.Id},  { student.FirstName},{ student.LastName}");
                }
                return File(Encoding.UTF8.GetBytes
                (stringBuilder.ToString()), "text/csv;charset=utf-8", "student.csv");
            }
            catch
            {
                return Error();
            }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-13
    • 1970-01-01
    • 2018-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-26
    • 1970-01-01
    相关资源
    最近更新 更多