CSV 编码问题 (Microsoft Excel)

发布于 2024-11-30 23:49:31 字数 211 浏览 2 评论 0原文

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

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

I am dynamically creating CSV files using C#, and I am encountering some strange encoding issues. I currently use the ASCII encoding, which works fine in Excel 2010, which I use at home and on my work machine. However, the customer uses Excel 2007, and for them there are some strange formatting issues, namely that the '£' sign (UK pound sign) is preceded with an accented 'A' character.

What encoding should I use? The annoying thing is that I can hardly test these fixes as I don't have access to Excel 2007!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

拥抱没勇气 2024-12-07 23:49:31

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

I'm using Windows ANSI codepage 1252 without any problems on Excel 2003. I explicitly changed to this because of the same issue you are seeing.

private const int WIN_1252_CP = 1252; // Windows ANSI codepage 1252

this._writer = new StreamWriter(fileName, false, Encoding.GetEncoding(WIN_1252_CP));
墨小沫ゞ 2024-12-07 23:49:31

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

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

I've successfully used UTF8 encoding when writing CSV files intended to work with Excel.

The only problem I had was making sure to use the overload of the StreamWriter constructor that takes an encoding as a parameter. The default encoding of StreamWriter says it is UTF8 but it's really UTF8-Without-A-Byte-Order-Mark and without a BOM Excel will mess up characters using multiple bytes.

音盲 2024-12-07 23:49:31

您需要将序言添加到文件中:

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

You need to add Preamble to file:

        var data = Encoding.UTF8.GetBytes(csv);
        var result = Encoding.UTF8.GetPreamble().Concat(data).ToArray();
        return File(new MemoryStream(result), "application/octet-stream", "file.csv");
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文