CSV编码问题(Microsoft Excel)

9

我正在使用C#动态创建CSV文件,遇到了一些奇怪的编码问题。我目前使用ASCII编码,在我家和工作电脑上使用的Excel 2010中运行良好。但是,客户使用的是Excel 2007,对他们而言存在一些奇怪的格式问题,即英镑符号'£'前面有一个带重音符号的字符。

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


请展示一些代码,特别是关于编码的部分,因为重音符号的 'A' 暗示着可能会使用 Unicode(在某些情况下像转义一样用于大于 128 的字符)... - Yahia
3个回答

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

6
我建议使用 Encoding.Default。这将始终获得系统默认的 ANSI 代码页,而不是硬编码为 1252。 - shf301
这似乎已经奏效了 - 我已经将CSV转发给客户,他们可以确认它有效。谢谢! - Chris
非常有用,这解决了我在生成 CVS 文件时遇到的编码问题。祝好。 - amelian
@AMGHoshi 感谢您的支持。 - Andy

4

在编写CSV文件以与Excel配合使用时,我已成功地使用了UTF8编码。

唯一的问题是确保使用StreamWriter构造函数的负载,该函数将编码作为参数。 StreamWriter的默认编码表示它是UTF8,但实际上它是没有字节顺序标记的UTF8,如果没有BOM,Excel会混淆使用多个字节的字符。


1
你需要为文件添加前导语:
        var data = Encoding.UTF8.GetBytes(csv);
        var result = Encoding.UTF8.GetPreamble().Concat(data).ToArray();
        return File(new MemoryStream(result), "application/octet-stream", "file.csv");

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接