FileInfo,StreamWriter和StringBuilder。这种组合产生什么编码?

时间:2010-08-26 23:07:30

标签: .net-4.0 c#-4.0

我有一个字符串列表,我正在写一个CSV文件。我这样写这个文件:

FileInfo outputFile = new FileInfo("c:\output.csv");
StreamWriter writer = outputFile.CreateText();
StringBuilder line = new StringBuilder();

// List<String> listOfItems = ...
for (int i = 0, j = listOfItems.Count; i < j; i++) {
  line.AppendFormat(" {0}", listOfItems[i]);
}

writer.WriteLine("col1,col2,{0}", line.ToString().Trim(' '));
writer.Close();

当我使用Notepad ++或enca等工具检查c:\output.csv时,该文件看起来是带有us-ascii编码的纯文本。但是,当我的客户将CSV上传到其网络商店时,使用StringBuilder构建的列采用以下格式:

:VAL1 :VAL2 :VAL3 ... :VALN

该列实际应该是:

val1 val2 val3 ... valN

请注意,错误的行的冒号前缀为每个值,并且值已大写。

我唯一能想到的就是编码问题。那么,上面的代码会生成什么编码?

更新(2010年9月1日):原来是远程网络商店中的显示错误。此代码输出纯文本。

2 个答案:

答案 0 :(得分:3)

我不认为这是编码问题。我会使用某种网络监视器(如NetMon或Fiddler)来验证正在传输的数据是否符合预期。我的猜测是,网上商店在您上传数据后正在操纵数据。

答案 1 :(得分:1)

我已经运行了您提供的代码并查看了使用十六进制编辑器生成的文件,它已经用UTF8 / ASCII编码,因为我在文件中可以看到的唯一内容是文本输出(确切地说由于您正在使用WriteLine而导致的CR + LF组合。无论导致文件转换为:VAL1 :VAL2 :VAL3的是什么都与您的代码无关。

那就是说,for (int i = 0; j = listOfItems.Count; i < j; i++)行没有为我编译,我必须将它调整为for (int i = 0; i < listOfItems.Count; i++) - 你确定你的生产代码中有什么?