Reputation: 10360
When exporting csv in Rails 4.2 app, there are ascii code in the csv output for Chinese characters (UTF8):
ä¸åˆåŒç†Šå·¥ç‰ç”¨é¤
We tried options in send_data
without luck:
send_data @payment_requests.to_csv, :type => 'text/csv; charset=utf-8; header=present'
And:
send_data @payment_requests.to_csv.force_encoding("UTF-8")
In model, there is forced encoding utf8:
# encoding: utf-8
But it does not work. There are online posts talking about use gem iconv
. However iconv
depends on the platform's ruby version. Is there cleaner solution to fix the ascii in Rails 4.2 csv exporting?
Upvotes: 9
Views: 2986
Reputation: 1016
This is what worked for me:
head = 'EF BB BF'.split(' ').map{|a|a.hex.chr}.join()
csv_str = CSV.generate(csv = head) do |csv|
csv << [ , , , ...]
@elements.each do |element|
csv << [ , , , ...]
end
end
Upvotes: 0
Reputation: 562
for Chinese characters
CSV.generate(options) do |csv|
csv << column_names
all.each do |product|
csv << product.attributes.values_at(*column_names)
end
end.encode('gb2312', :invalid => :replace, :undef => :replace, :replace => "?")
Upvotes: 1
Reputation: 879
If @payment_requests.to_csv
includes ASCII text, then you should use encode
method:
@payment_requests.to_csv.encode("UTF-8")
or
@payment_requests.to_csv.force_encoding("ASCII").encode("UTF-8")
depending on which internal encoding @payment_requests.to_csv
has.
Upvotes: 6