CatNip44
CatNip44

Reputation: 157

FasterCSV and Non-Latin Characters

Iv recently written code that will help me export an SQL database into CSV using FasterCSV with rails. However some parts of my database contain Traditional Chinese Characters. When I export it i'm getting ?????? as the output in the CSV file. Iv already tried changing the $KCODE = 'u' so that FasterCSV uses UTF-8 to encode the CSV file, but no luck. Iconv to convert the encoding is giving me strange results as well. Here is the source code:

def csv
@lists = Project.find(:all, :order=> (params[:sort] + ' ' + params[:direction]), :conditions =>  ["name LIKE ?", "%#{params[:selection]}%"])

csv_string = FasterCSV.generate do |csv|
  csv << [<bold> "Status","Name","Summary","Description","Creator","Comment","Contact Information","Created Date","Updated Date"]

  @lists.each do |project|
    csv << [project.status, project.name, project.summary, project.description, project.creator, project.statusreason, project.contactinfo, project.created_at, project.updated_at]
  end
end

filename = Time.now.strftime("%Y%m%d") + ".csv"
send_data(csv_string,
  :type => 'text/csv; charset=utf-8; header=present',
  :filename => filename)

end

Thanks,

Upvotes: 1

Views: 2167

Answers (1)

kikito
kikito

Reputation: 52621

I'm not used to work with chinese characters, but you can try adding the :encoding option to 'u' (UTF-8) on the generate call:

...
csv_string = FasterCSV.generate(:encoding => 'u') do |csv|
...

As a side note, I'd recommend using named_scopes instead of writing this:

Project.find(:all, :order=> (params[:sort] + ' ' + params[:direction]), :conditions =>  ["name LIKE ?", "%#{params[:selection]}%"])

Good luck!

Upvotes: 2

Related Questions