我从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;
}
以下是Notepad和Notepad ++中的结果:
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中编写输出并进行调试以查看其内容,但它没有这些字符。
答案 0 :(得分:5)
这是UTF8编码的BOM
答案 1 :(得分:2)
我认为这是BOM(unicode标头)。在StreamWriter的构造函数中指定ANSI编码。这很简单:只需将其设置为Encoding.Default
。
<强>更新强>
如果必须使用UTF-8并且需要在开头删除这3个字节,请使用:new UTF8Encoding(false)
。这样编写器将保持UTF8,但不会写BOM。
答案 2 :(得分:2)
您可能希望根据输入指定编码类型。 StreamWriter.Encoding属性
http://msdn.microsoft.com/en-us/library/system.io.streamwriter.encoding.aspx
答案 3 :(得分:1)
在创建StreamWriter时尝试指定Encoding.ASCII
而不是使用Encoding.UTF8