CSV编码问题(Microsoft Excel)

我使用C#dynamic创buildCSV文件,并遇到一些奇怪的编码问题。 我目前使用ASCII编码,这在Excel 2010中正常工作,我在家里和在工作机器上使用。 但是,客户使用Excel 2007,对于他们来说,有一些奇怪的格式问题,即英镑符号(“英镑符号”)前面带有重音的“A”字符。

我应该使用什么编码? 令人讨厌的是,我几乎无法testing这些修补程序,因为我无法访问Excel 2007!

我正在使用Windows ANSI代码页1252没有任何问题在Excel 2003上。我明确地更改为此,因为您看到相同的问题。

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");