行尾的空格是否有效CSV?

时间:2014-03-18 22:19:26

标签: ruby csv

如果CSV文件的一行以空格结尾(引号之外)是有效的CSV吗?

例如:

require "csv"

csv1 = "\"foo\",\"bar\""
CSV.new(csv1).first
#=> ["foo", "bar"]

csv2 = "\"foo\",\"bar\" " # Note the extra space at the end of the line
CSV.new(csv2).first
#=> raises CSV::MalformedCSVError: Unclosed quoted field on line 1.

这是否意味着CSV无效?或者这是CSV库中的错误吗?

1 个答案:

答案 0 :(得分:1)

我认为这只是关注RFC 4180。正如Wikipedia page所说:“根据RFC 4180中的语法,不允许字段中的引号之外的空格”。

语法的相关部分如下:

record = field *(COMMA field)

field = (escaped / non-escaped)

escaped = DQUOTE *(TEXTDATA / COMMA / CR / LF / 2DQUOTE) DQUOTE

,不允许字段中引号之外的空格。

这也发生在行内的额外空格,而不仅仅是在最后:

# note extra space after the comma
csv = '"foo", "bar"'
CSV.new(csv).first

结果为:Illegal quoting in line 1. (CSV::MalformedCSVError)