Rails Rails 4 生成 CSV 文件乱码,Mac OS

goody9807 · 2015年09月23日 · 最后由 jihao 回复于 2015年10月30日 · 2370 次阅读
# csv_data = 'EF BB BF'.split(' ').map{|a|a.hex.chr}.join()
    csv_data = ::Sgcb::ExportData::export_csv(order_show_field_name, order_show_field, batch_items, headername, headervalue)
    puts 'csv_data'
    puts csv_data
    File.open(@outfile, "w") do |file|
      file.puts csv_data
    end

在网上查了很多资料,大多数都说在文件头增加一些 utf-8 的识别码,但我试了试还是不行

我的系统是 Mac OS,使用 Rubymine 开发

请大侠指点下,接触 ror 3 个月

def self.export_csv(showfieldname, showfield, records,headername=nil,headervalues=nil, &block)
     header_fieldname =[]
     header_fieldvalue =[]

     if(!headername.nil?)
       headername.each { |item|
         header_fieldname << convert_gb(item)
       }
       headervalues.each { |item|
         header_fieldvalue << convert_gb(item)
       }

     end
     new_showfieldname = []
     showfieldname.each { |item|
       new_showfieldname <<  convert_gb(item) #需要转码到gb
     }
     csv_string = CSV.generate do |csv|
       csv << header_fieldname
       csv << header_fieldvalue
       csv << new_showfieldname
       records.each do |record|
         arr = []
         showfield.each do |item|
           if item.index('.').blank?
             v = record.send(item)
           else
             #获取关联对象的值,比如lessons_user.lesson.name
             obj = record
             item.split('.').each {|m|  obj = obj.send(m)}
             v = obj
           end
           v = v.strftime("%Y-%m-%d %H:%M:%S") if (item == "created_at")||item == "updated_at" #格式化时间
           v = block.call item, v if block_given? #将key, value传给block,将返回结果作为新的value
           arr.push(convert_gb(v))
         end
         csv << arr
       end
     end
   end

贴代码烦请使用 fenced code block

以及,乱码在哪?我怎么没看到?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号