生成CSV文件时避免双引号混淆?

时间:2015-02-23 08:02:19

标签: ruby csv formatting string-formatting export-to-csv

我正在将一些字符串推送到CSV文件:

csv_string = CSV.generate({col_sep: ";", row_sep: "\n"}) do |csv|
  csv << ["101-41", "Sparri, \"Violet\" (rod) (1 bunt á 10 stk.)"]
end

当最终生成CSV文件时,常规Excel安装将显然正确显示内容,但仔细查看纯文本编辑器(如Sublime Text)会显示双引号会造成混淆:

10-41;"Sparri, ""Violet"" (rod) (1 bunt á 10 stk.)"

我该如何避免这种情况?在推送到CSV文件之前,我应该将双引号转换为不同的名称吗?

2 个答案:

答案 0 :(得分:2)

这是正确的,双引号会被另一个双引号转义。来自RFC 4180

  

如果使用双引号括起字段,则使用双引号   出现在一个字段内必须通过前面的方式进行转义   另一个双引号。例如:

"aaa","b""bb","ccc"

答案 1 :(得分:0)

CSV不是官方标准,很奇怪。 有RFC 4180 guidelines表示双引号

5.  Each field may or may not be enclosed in double quotes (however
       some programs, such as Microsoft Excel, do not use double quotes
       at all).  If fields are not enclosed with double quotes, then
       double quotes may not appear inside the fields.  For example:

       "aaa","bbb","ccc" CRLF
       zzz,yyy,xxx

   6.  Fields containing line breaks (CRLF), double quotes, and commas
       should be enclosed in double-quotes.  For example:

       "aaa","b CRLF
       bb","ccc" CRLF
       zzz,yyy,xxx

   7.  If double-quotes are used to enclose fields, then a double-quote
       appearing inside a field must be escaped by preceding it with
       another double quote.  For example:

       "aaa","b""bb","ccc"

所以你的格式是正确的,只要Excel正确显示文件我就不会介意双&#34;双引号&#34;