代码之家  ›  专栏  ›  技术社区  ›  James Sumners

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

  •  1
  • James Sumners  · 技术社区  · 15 年前

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

    当我检查的时候 c:\output.csv 使用Notepad++或 enca 该文件看起来是带有us ascii编码的纯文本。但是当我的客户将CSV上传到他们的web商店时 StringBuilder

    :VAL1 :VAL2 :VAL3 ... :VALN

    该列实际上应该是:

    val1 val2 val3 ... valN

    请注意,错误的行在每个值前面都加了冒号,并且这些值都是大写的。

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

    2 回复  |  直到 15 年前
        1
  •  3
  •   David    15 年前

        2
  •  1
  •   Rob    15 年前

    我已经运行了你展示的代码,并检查了使用十六进制编辑器生成的文件,它已经被编码在 UTF8 /ASCII是我在文件中看到的唯一内容,它是文本输出(与所写的完全相同)加上由您使用 WriteLine :VAL1 :VAL2 :VAL3 与你的代码无关。

    也就是说,这条线 for (int i = 0; j = listOfItems.Count; i < j; i++) 没有为我编译,我不得不调整它 for (int i = 0; i < listOfItems.Count; i++)