CSV编码问题(Microsoft Excel)

本文关键字:Excel Microsoft 编码 问题 CSV | 更新日期: 2023-09-27 18:06:25

我正在使用c#动态创建CSV文件,并且我遇到了一些奇怪的编码问题。我目前使用ASCII编码,它在Excel 2010中工作良好,我在家里和我的工作机器上使用。然而,客户使用Excel 2007,对他们来说有一些奇怪的格式问题,即'£'符号(英国磅符号)之前有一个重音'A'字符。

我应该使用什么编码?令人恼火的是,我几乎无法测试这些修复,因为我无法访问Excel 2007!

CSV编码问题(Microsoft Excel)

我在Excel 2003上使用Windows ANSI代码页1252没有任何问题。我明确地改成了这个,因为你也看到了同样的问题。

private const int WIN_1252_CP = 1252; // Windows ANSI codepage 1252
this._writer = new StreamWriter(fileName, false, Encoding.GetEncoding(WIN_1252_CP));

在编写打算与Excel一起工作的CSV文件时,我已经成功地使用了UTF8编码。

我遇到的唯一问题是确保使用以编码作为参数的StreamWriter构造函数的重载。StreamWriter的默认编码说它是UTF8,但它实际上是UTF8- without - a - byte - order - mark并且没有BOM, Excel将使用多个字节混淆字符。

你需要添加序言到文件:

        var data = Encoding.UTF8.GetBytes(csv);
        var result = Encoding.UTF8.GetPreamble().Concat(data).ToArray();
        return File(new MemoryStream(result), "application/octet-stream", "file.csv");