我想用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 + "\"";
}
答案 0 :(得分:1)
此代码对我有用:
private static string AddDoubleQuotes(string str)
{
str = $"\"" + "\"" + "\"" + str + "\"" + "\"" + "\"";
return str;
}
只需再添加两个转义字符,例如\"
共3个。
答案 1 :(得分:1)
虽然引号会在记事本中显示,但很正常,它们不会出现在Excel中或者使用其他csv解析器读取时。
csv文件中的引号仅用于包含可能在其中包含分隔符的字段(它们甚至不表示该字段应被视为字符串,引号也可以是包含分隔符的数字)。
要在解析后仍然可以看到引号,它们必须使用另一个引号进行转义,然后用引号括起来以使用引号字段,如下所示:
"""Artist""","""Album""","""Track"""
出于同样的原因,当从代码生成csv文件时,应检查每个字段的分隔符和引号,然后必须使用另一个引号转义这些引号。