如果字段包含逗号,则应将其放在双(或单)引号中。
你可以使用文件助手库 http://filehelpers.sourceforge.net/要创建 CSV 文件,它应该正确处理转义。
如果您不想使用该库,则重要的一点是:如果您有逗号,则必须将字段放在引号内,例如
ID, NAME
1, "Doe, John"
2, 'Doe, Jane'
如果您的字段包含引号,您应该使用附加引号对其进行转义:
3, "Anakin ""Darth Vader"", Skywalker"
4, 'O''Connor, Sinead'
一个可能的解决方案:
static string CsvEscape(this string value) {
if (value.Contains(",")) {
return "\"" + value.Replace("\"", "\"\"") + "\"";
}
return value;
}
然后在你的代码中:
IEnumerable<string> fields = row.ItemArray.Select(field => field.ToString().CsvEscape());
PS:根据维基百科 http://en.wikipedia.org/wiki/Comma-separated_values没有真正的 csv 规范,但是RFC 4180 https://www.rfc-editor.org/rfc/rfc4180描述了一种经常使用的格式。