我正在使用C#动态创建CSV文件,遇到了一些奇怪的编码问题。我目前使用ASCII编码,在我家和工作电脑上使用的Excel 2010中运行良好。但是,客户使用的是Excel 2007,对他们而言存在一些奇怪的格式问题,即英镑符号'£'前面有一个带重音符号的字符。
我应该使用什么编码?令人烦恼的是,我几乎无法测试这些修复,因为我没有访问Excel 2007的权限!
我正在使用C#动态创建CSV文件,遇到了一些奇怪的编码问题。我目前使用ASCII编码,在我家和工作电脑上使用的Excel 2010中运行良好。但是,客户使用的是Excel 2007,对他们而言存在一些奇怪的格式问题,即英镑符号'£'前面有一个带重音符号的字符。
我应该使用什么编码?令人烦恼的是,我几乎无法测试这些修复,因为我没有访问Excel 2007的权限!
我在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));
在编写CSV文件以与Excel配合使用时,我已成功地使用了UTF8编码。
唯一的问题是确保使用StreamWriter构造函数的负载,该函数将编码作为参数。 StreamWriter的默认编码表示它是UTF8,但实际上它是没有字节顺序标记的UTF8,如果没有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");