StringBuilder 导出 csv 开头带引号
StringBuilder export csv with quotation marks at the beginning
我想用 StringBuilder 将几行 csv 写入一个 csv 文件。我用引号将每个字段括起来。如果我将文件导出为 .txt,我就得到了我想要的 ("Artist","Album","Track")。
如果我导出为 .csv,则第一个字段未用引号引起来 (Artist,"Album","Track")。一些重现问题的测试代码:
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 + "\"";
}
这段代码对我有用:
private static string AddDoubleQuotes(string str)
{
str = $"\"" + "\"" + "\"" + str + "\"" + "\"" + "\"";
return str;
}
再添加两个转义字符,如\"
,总共3个
虽然引号在记事本中可见,但在 Excel 或使用其他 csv 解析器读取时不出现是很正常的。
csv 文件中的引号仅用于括起其中可能有分隔符的字段(它们甚至不意味着该字段应被视为字符串,引号也可以围绕包含分隔符的数字).
要使引号在解析后仍然可见,必须使用另一个引号对其进行转义,然后用引号将其包围以具有带引号的字段,如下所示:
"""Artist""","""Album""","""Track"""
出于同样的原因,从代码生成 csv 文件时,应检查每个字段的分隔符和引号,然后必须使用另一个引号对这些引号进行转义。
我想用 StringBuilder 将几行 csv 写入一个 csv 文件。我用引号将每个字段括起来。如果我将文件导出为 .txt,我就得到了我想要的 ("Artist","Album","Track")。 如果我导出为 .csv,则第一个字段未用引号引起来 (Artist,"Album","Track")。一些重现问题的测试代码:
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 + "\"";
}
这段代码对我有用:
private static string AddDoubleQuotes(string str)
{
str = $"\"" + "\"" + "\"" + str + "\"" + "\"" + "\"";
return str;
}
再添加两个转义字符,如\"
,总共3个
虽然引号在记事本中可见,但在 Excel 或使用其他 csv 解析器读取时不出现是很正常的。
csv 文件中的引号仅用于括起其中可能有分隔符的字段(它们甚至不意味着该字段应被视为字符串,引号也可以围绕包含分隔符的数字).
要使引号在解析后仍然可见,必须使用另一个引号对其进行转义,然后用引号将其包围以具有带引号的字段,如下所示:
"""Artist""","""Album""","""Track"""
出于同样的原因,从代码生成 csv 文件时,应检查每个字段的分隔符和引号,然后必须使用另一个引号对这些引号进行转义。