2015-04-21 3 views
9

Wenn csv in Rails 4.2 App exportieren, gibt es für chinesische Zeichen in der CSV-Ausgabe (UTF8) ASCII-Code:Rails 4.2 - wie man ASCII-Code im CSV-Export ohne Edelstein 'iconv' reparieren kann?

中åˆåŒç†Šå·¥ç­‰ç”¨é¤ 

Wir in send_data Optionen ausprobiert, ohne Glück:

send_data @payment_requests.to_csv, :type => 'text/csv; charset=utf-8; header=present' 

Und:

send_data @payment_requests.to_csv.force_encoding("UTF-8") 

In-Modell, wird gezwungen Kodierung utf8:

# encoding: utf-8 

Aber es funktioniert nicht. Es gibt Online-Beiträge, die über die Verwendung von Gem iconv sprechen. Allerdings hängt von der Ruby-Version der Plattform ab. Gibt es eine sauberere Lösung, um die Ascii in Rails 4.2 CSV-Export zu beheben?

+0

http://stackoverflow.com/a/8873922/525478 –

+0

Was ist die eigentliche Codierung der Daten? –

+0

'@ FrederickCheung', ich glaube, es ist utf8 als Rails 4 Standard. Es gibt eine ähnliche Exportmethode, die wir in der App Rails 3 verwendet haben, und chinesische Zeichen wurden korrekt angezeigt. – user938363

Antwort

1

können Sie versuchen:

@payment_requests.to_csv.force_encoding("ISO-8859-1") 
+0

Kein Glück. obwohl es ein sauberes ist. – user938363

+0

Chinesische Schriftzeichen? Vielleicht brauchen Sie UTF-8 anstelle von ISO-8859-1. – dx7

+0

versucht .force_encoding ("UTF-8") ohne Glück. – user938363

6

Wenn @payment_requests.to_csv ASCII-Text enthält, dann sollten Sie encode Methode verwenden:

@payment_requests.to_csv.encode("UTF-8") 

oder

@payment_requests.to_csv.force_encoding("ASCII").encode("UTF-8") 

je nachdem, welche die interne Codierung @payment_requests.to_csv hat .

1

für chinesische Schriftzeichen

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 => "?") 
0

Dies ist, was für mich gearbeitet:

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 
Verwandte Themen