CSV编码问题(Microsoft Excel)

时间:2011-08-22 17:25:09

标签: c# excel encoding csv

我使用C#动态创建CSV文件,我遇到了一些奇怪的编码问题。我目前使用ASCII编码,它在Excel 2010中运行良好,我在家里和工作机器上使用它。但是,客户使用的是Excel 2007,对于他们来说有一些奇怪的格式问题,即'£'符号(英镑符号)前面带有重音'A'字符。

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

3 个答案:

答案 0 :(得分:14)

我在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));

答案 1 :(得分:4)

在编写旨在使用Excel的CSV文件时,我已成功使用UTF8编码。

我遇到的唯一问题是确保使用StreamWriter构造函数的重载,该构造函数将编码作为参数。 StreamWriter的默认编码表示它是UTF8,但它确实是UTF8-Without-A-Byte-Order-Mark而没有BOM Excel将使用多个字节搞乱字符。

答案 2 :(得分:0)

您需要将Preamble添加到文件:

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