Ruby on rails Rails-在ActionMailer中附加一个可以读取为UTF8的CSV和BOM
在ActionMailer中,我试图将数组转换为CSV,并确保文件可以像在UTF8和BOM中转换一样读取 以前,我将内容复制到一个新的文件中,使用Sublime文本,然后单击文件>使用编码保存>使用BOM的UTF8,否则字符将变得混乱 如何在通过ActionMailer发送内存中的CSV时实现相同的编码?我从未将文件写入磁盘 这是我发送电子邮件的示例代码Ruby on rails Rails-在ActionMailer中附加一个可以读取为UTF8的CSV和BOM,ruby-on-rails,csv,encoding,actionmailer,Ruby On Rails,Csv,Encoding,Actionmailer,在ActionMailer中,我试图将数组转换为CSV,并确保文件可以像在UTF8和BOM中转换一样读取 以前,我将内容复制到一个新的文件中,使用Sublime文本,然后单击文件>使用编码保存>使用BOM的UTF8,否则字符将变得混乱 如何在通过ActionMailer发送内存中的CSV时实现相同的编码?我从未将文件写入磁盘 这是我发送电子邮件的示例代码 class CSVMailer < ApplicationMailer def csv(csv_as_array_of_array,
class CSVMailer < ApplicationMailer
def csv(csv_as_array_of_array,
to:,
cc: [],
from: 'messages-noreply@example.com',
reply_to: 'me@example.com',
subject: 'Here is your CSV made with love Alright here is how I did it, assuming you are sending the following array of arrays to the mailer function
csv_as_array_of_array = [
['header1', 'header2'],
['row1cell1', 'row1cell2'],
...
]
类CSVMailer 主题:“这是你的CSV是用爱制作的好吧,这是我是怎么做的,假设你正在向mailer函数发送以下数组
# Small utility method
def Utility.with_utf8_bom(content)
"\uFEFF" + content
end
一个简单的实用程序函数将UTF8 bom预先添加到csv就足够了
class CSVMailer < ApplicationMailer
# app/mailers/csv_mailer.rb
def send_email_with_csv(csv_as_array_of_array)
...
attach_csv(csv_as_array_of_array, filename: filename)
mail(to: ...)
end
private
def attach_csv(array_of_arrays, filename:)
attachments[filename] = {
mine_type: 'text/csv',
content: Utility.with_utf8_bom(
CSV.generate(col_sep: ';', encoding: Encoding::UTF_8) do |csv|
array_of_arrays.each do |row|
csv << row
end
end
)
}
end
所以在ActionMailer类中