StringBuilder在开头导出带引号的csv

时间:2017-03-16 20:24:04

标签: c# csv stringbuilder quotation-marks

我想用StringBuilder将几个csv行写入csv文件。我用quoation标记包围每个字段。如果我将文件导出为.txt,我的确想要的是("艺术家","专辑"," Track") 。 如果我导出为.csv,则第一个字段不包含带有标记(艺术家,"专辑","曲目")。一些重现问题的测试代码:

static void Main(string[] args)
{
  StringBuilder csv = new StringBuilder();

  string artist = EncloseComma("Artist");
  string album = EncloseComma("Album");
  string track = EncloseComma("Track");

  string newLine = string.Format("{0},{1},{2}", artist, album, track);
  csv.AppendLine(newLine);
  File.WriteAllText("test.csv", csv.ToString());
}

private static string EncloseComma(string str)
{
  return "\"" + str + "\"";
}

2 个答案:

答案 0 :(得分:1)

此代码对我有用:

    private static string AddDoubleQuotes(string str)
    {
        str = $"\"" + "\"" + "\"" + str + "\"" + "\"" + "\"";
        return str;
    }

只需再添加两个转义字符,例如\"共3个。

答案 1 :(得分:1)

虽然引号会在记事本中显示,但很正常,它们不会出现在Excel中或者使用其他csv解析器读取时。

csv文件中的引号仅用于包含可能在其中包含分隔符的字段(它们甚至不表示该字段应被视为字符串,引号也可以是包含分隔符的数字)。

要在解析后仍然可以看到引号,它们必须使用另一个引号进行转义,然后用引号括起来以使用引号字段,如下所示:

"""Artist""","""Album""","""Track"""

出于同样的原因,当从代码生成csv文件时,应检查每个字段的分隔符和引号,然后必须使用另一个引号转义这些引号。