Rails 4.2 - 如何在没有gem'iconv'的CSV导出中修复ascii代码?

use*_*363 9 csv ruby-on-rails ruby-on-rails-4

在Rails 4.2应用程序中导出csv时,csv输出中有ascii代码用于中文字符(UTF8):

中åˆåŒç†Šå·¥ç­‰ç”¨é¤
Run Code Online (Sandbox Code Playgroud)

我们send_data没有运气就尝试了选项:

send_data @payment_requests.to_csv, :type => 'text/csv; charset=utf-8; header=present'
Run Code Online (Sandbox Code Playgroud)

和:

send_data @payment_requests.to_csv.force_encoding("UTF-8")
Run Code Online (Sandbox Code Playgroud)

在模型中,有强制编码utf8:

# encoding: utf-8
Run Code Online (Sandbox Code Playgroud)

但它不起作用.有在线帖子谈论使用gem iconv.但是iconv取决于平台的ruby版本.是否有更清洁的解决方案来修复Rails 4.2 csv导出中的ascii?

Die*_*ski 6

如果@payment_requests.to_csv包含ASCII文本,那么你应该使用encode方法:

@payment_requests.to_csv.encode("UTF-8")
Run Code Online (Sandbox Code Playgroud)

要么

@payment_requests.to_csv.force_encoding("ASCII").encode("UTF-8")
Run Code Online (Sandbox Code Playgroud)

取决于哪种内部编码@payment_requests.to_csv.


小智 1

你可以试试:

@payment_requests.to_csv.force_encoding("ISO-8859-1")
Run Code Online (Sandbox Code Playgroud)