我的CSV中有这样的一行:
"Samsung U600 24"","10000003409","1","10000003427"
24
旁边的引号用于表示英寸,而该引号旁边的引号将关闭该字段。我正在阅读fgetcsv
行,但解析器出错并将值读取为:
Samsung U600 24",10000003409"
我尝试在英寸引号之前加一个反斜杠,但后来我只是在名字中得到一个反斜杠:
Samsung U600 24\"
有没有办法在CSV中正确转义此值,以便值为Samsung U600 24"
,还是必须在处理器中对其进行正则表达式?
答案 0 :(得分:217)
使用2个引号:
"Samsung U600 24"""
答案 1 :(得分:18)
答案 2 :(得分:0)
我知道这是一篇老文章,但这是我使用扩展方法在C#中解决它(以及将空值转换为空字符串的方法)。
使用以下内容创建一个静态类:
/// <summary>
/// Wraps value in quotes if necessary and converts nulls to empty string
/// </summary>
/// <param name="value"></param>
/// <returns>String ready for use in CSV output</returns>
public static string Q(this string value)
{
if (value == null)
{
return string.Empty;
}
if (value.Contains(",") || (value.Contains("\"") || value.Contains("'") || value.Contains("\\"))
{
return "\"" + value + "\"";
}
return value;
}
然后针对您要写入CSV的每个字符串,而不是:
stringBuilder.Append( WhateverVariable );
您只是这样做:
stringBuilder.Append( WhateverVariable.Q() );
答案 3 :(得分:-1)
如果值包含逗号,换行符或双引号,则字符串必须用双引号引起来。例如:“此字段中的换行符\ n”。
您可以使用下面的在线工具来转义“”和“,”运算符。 https://www.freeformatter.com/csv-escape.html#ad-output