缺少前导引号的 CSV 数据是否被视为格式错误?
Is CSV data with missing leading quotations considered malformed?
我正在使用 OpenCSV 读取 CSV 文件。查看文档,我没有看到有关如何处理格式错误数据的指南。
我有一个 CSV 文件。具有所有预期的功能:每个字段都用逗号分隔,每个字段都用引号括起来,以防其中一个值可能包含逗号。但是,每一行(headers 除外)都缺少前导引号。这是一个例子
"Header 1","Header2"
value1","value2"
value1","value2"
由于引号的排列方式,CSV 解析器最终跳过了每一行,这显然会导致问题。
我认为这是一个错误,因为第一列缺少引号,因为我知道数据应该是什么样子,但就 CSV 规范而言,这可能被认为是有效的?如果是这样,我想我必须自己建立额外的检查以确保我没有遗漏任何行,尽管它包含有效的 CSV 数据。
While there are various specifications and implementations for the
CSV format, there is no formal
specification in existence, which allows for a wide variety of
interpretations of CSV files.
简单地说,格式错误?不,非正式?没有。甚至 this 文章(链接在 RFC 中)也提到行可以与引号混合匹配,也可以不与引号混合匹配。
对于您显示的数据:
"Header 1","Header2"
value1","value2"
value1","value2"
我们可以争辩说数据没有格式错误如果这些字段将被视为未被引用和 字段从不包含分隔符 和 没有多行字段,这将给出值:
"Header 1" "Header2"
value1" "value2"
value1" "value2"
当然,很明显此数据应该包含带引号的字段。在那种情况下,数据肯定是格式错误的,并且可以用不同的解析器进行不同的解析(甚至可能是多行字段)。
有效选项为:
value1,value2 // no quotes at all
"value1","value2" // all quoted
value1,"value2,more data" // only quoted when there is a separator inside
我正在使用 OpenCSV 读取 CSV 文件。查看文档,我没有看到有关如何处理格式错误数据的指南。
我有一个 CSV 文件。具有所有预期的功能:每个字段都用逗号分隔,每个字段都用引号括起来,以防其中一个值可能包含逗号。但是,每一行(headers 除外)都缺少前导引号。这是一个例子
"Header 1","Header2"
value1","value2"
value1","value2"
由于引号的排列方式,CSV 解析器最终跳过了每一行,这显然会导致问题。
我认为这是一个错误,因为第一列缺少引号,因为我知道数据应该是什么样子,但就 CSV 规范而言,这可能被认为是有效的?如果是这样,我想我必须自己建立额外的检查以确保我没有遗漏任何行,尽管它包含有效的 CSV 数据。
While there are various specifications and implementations for the CSV format, there is no formal specification in existence, which allows for a wide variety of interpretations of CSV files.
简单地说,格式错误?不,非正式?没有。甚至 this 文章(链接在 RFC 中)也提到行可以与引号混合匹配,也可以不与引号混合匹配。
对于您显示的数据:
"Header 1","Header2"
value1","value2"
value1","value2"
我们可以争辩说数据没有格式错误如果这些字段将被视为未被引用和 字段从不包含分隔符 和 没有多行字段,这将给出值:
"Header 1" "Header2"
value1" "value2"
value1" "value2"
当然,很明显此数据应该包含带引号的字段。在那种情况下,数据肯定是格式错误的,并且可以用不同的解析器进行不同的解析(甚至可能是多行字段)。
有效选项为:
value1,value2 // no quotes at all
"value1","value2" // all quoted
value1,"value2,more data" // only quoted when there is a separator inside