如果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库中的错误吗?
答案 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)
。