【发布时间】:2016-07-29 18:46:23
【问题描述】:
我假设通过将:col_sep 声明为 \t
CSV.foreach("items.tsv", :col_sep => "\t", headers: true) do |row|
包含双引号的列不会产生问题,但 CSV 导入过程仍然抱怨 CSV::MalformedCSVError: Illegal quoting in line 45.
如何优雅地避免这种情况?
【问题讨论】:
我假设通过将:col_sep 声明为 \t
CSV.foreach("items.tsv", :col_sep => "\t", headers: true) do |row|
包含双引号的列不会产生问题,但 CSV 导入过程仍然抱怨 CSV::MalformedCSVError: Illegal quoting in line 45.
如何优雅地避免这种情况?
【问题讨论】:
从 Ruby 2.4 开始,您可以传递 liberal_parsing: true 选项以允许对 CSV.foreach、CSV.parse、CSV.new 等方法使用双引号。
文件在这里
https://docs.ruby-lang.org/en/2.5.0/CSV.html
当设置为真值时,CSV 将尝试解析不符合 RFC 4180 的输入,例如未加引号的字段中的双引号。
【讨论】:
回答found here。添加引号字符的规范,在这种情况下是不可打印的:
CSV.foreach("items.tsv", :col_sep => "\t", :quote_char => "\x00", headers: true) do |row|
成功了。所以,显然定义col_sep 是不够的。
【讨论】: