正确使用CSV中的双引号

时间:2013-07-23 11:10:58

标签: csv escaping

我的CSV中有这样的一行:

"Samsung U600 24"","10000003409","1","10000003427"

24旁边的引号用于表示英寸,而该引号旁边的引号将关闭该字段。我正在阅读fgetcsv行,但解析器出错并将值读取为:

Samsung U600 24",10000003409"

我尝试在英寸引号之前加一个反斜杠,但后来我只是在名字中得到一个反斜杠:

Samsung U600 24\"

有没有办法在CSV中正确转义此值,以便值为Samsung U600 24",还是必须在处理器中对其进行正则表达式?

4 个答案:

答案 0 :(得分:217)

使用2个引号:

"Samsung U600 24"""

答案 1 :(得分:18)

不仅需要双引号,还需要单引号('),双引号("),反斜杠(\)和NUL(NULL字节)。

使用fputcsv()撰写,fgetcsv()阅读,这将照顾所有人。

答案 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