【问题标题】:Create CSV file from c#: extra character in excel从 c# 创建 CSV 文件:excel 中的额外字符
【发布时间】:2011-06-23 08:12:46
【问题描述】:

我从 C# 应用程序创建了一个 CSV 文件,但字符  显示在 Excel 和 OpenOfficeCalc 中的第一个单元格中,但不显示在记事本和记事本++中。

这是我的代码:

StreamWriter streamWriter = new StreamWriter(new FileStream(filePath, FileMode.Create), Encoding.UTF8);
List<MyData> myData = GetMyData;

foreach(MyData md in myData)
{
    streamWriter.WriteLine(md.Date + "," + md.Data1 + "," + md.Data2 + "," + md.Data3 + "," + md.Data4);
}
streamWriter.Flush();
streamWriter.Close();

MyData

public struct MyData
{
    public float Data1;
    public float Data2;
    public float Data3;
    public float Data4;
    public DateTime Date;
}

这是记事本和记事本++中的结果:

01/12/2010 00:04:00,0.08,78787.4,9.1,5
01/12/2010 00:09:00,0.07,78787.42,9.1,5
01/12/2010 00:14:00,0.06,78787.44,9.1,5
01/12/2010 00:19:00,1.45,78787.58,9.1,5
01/12/2010 00:24:00,2.13,78788.15,9.1,5
01/12/2010 00:29:00,1.72,78788.53,9,5
01/12/2010 00:34:00,0.89,78788.73,9,5

在 Excel 和 Calc 中:

01/12/2010 00:04:00   0.08    78787.4     9.1    5
01/12/10 00:09           0.07    78787.42    9.1    5
01/12/10 00:14           0.06    78787.44    9.1    5
01/12/10 00:19           1.45    78787.58    9.1    5
01/12/10 00:24           2.13    78788.15    9.1    5
01/12/10 00:29           1.72    78788.53    9      5
01/12/10 00:34           0.89    78788.73    9      5

这 3 个字符仅在文件开头出现一次,然后一切正常。

我的问题是:

从何而来,如何去除?

我尝试在 StringBuilder 中编写输出并进行调试以查看其内容,但它没有这些字符。

【问题讨论】:

    标签: c# csv


    【解决方案1】:

    我认为那是 BOM(unicode 标头)。在 StreamWriter 的构造函数中指定 ANSI 编码。很简单:只需将其设置为Encoding.Default

    更新: 如果您必须使用 UTF-8 并且需要在开头删除这 3 个字节,请使用:new UTF8Encoding(false)。这样编写器将保留在 UTF8 中,但不会编写 BOM。

    【讨论】:

    • OK,那么你需要留在 UTF8 并省略 BOM。我用如何做的信息更新了我的答案。我希望它有所帮助。
    【解决方案2】:

    在创建 StreamWriter 时尝试指定Encoding.ASCII 而不是使用Encoding.UTF8

    【讨论】:

    • 谢谢。它有效,但正如我对 Al Keep 所说,我需要用 UTF8 编码。
    【解决方案3】:

    您可能希望根据输入指定编码类型。 StreamWriter.Encoding 属性

    http://msdn.microsoft.com/en-us/library/system.io.streamwriter.encoding.aspx

    【讨论】:

      【解决方案4】:

      这是 UTF8 编码的 BOM

      看这个问题:Write text files without Byte Order Mark (BOM)?

      【讨论】:

        猜你喜欢
        • 2012-07-12
        • 2018-07-26
        • 1970-01-01
        • 1970-01-01
        • 2012-08-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多