我想发送一封包含ActionMailer的电子邮件。我想在ISO-8859-1和UTF-8
中发送相同的csv编码我的梅勒:
class MyMailer < ActionMailer::Base
default :from => "Me <contact@me.com>"
# ===========
# = Reports =
# ===========
# report is in UTF-8
def send_report(email, report, subject, filename, campaign_id)
attachments[filename + '.utf_8.csv']= { :data => report, :encoding => 'base64', :mime_type => "text/csv" }
attachments[filename + '.latin1.csv']= { :data => report.encode('ISO-8859-1'), :encoding => 'base64', :mime_type => "text/csv; charset=ISO-8859-1" }
@campaign_id = campaign_id
mail(to: email, subject: subject)
end
end
我收到了错误:
incompatible character encodings: ISO-8859-1 and UTF-8
如果我尝试单独发送它们,它就可以正常工作......
答案 0 :(得分:0)
ActionMailer文档规定
如果您想使用与Base64不同的编码,您可以传入编码,但是由您决定传入预编码的内容
因此,您希望对附件进行双重编码。我会首先删除:编码选项。其次,您没有告诉我们编码错误发生的位置。也许您的文档中有UTF-8无法编码为ISO?
第三,将report
传递给附件哈希。它可能会在其上调用force_encoding
。但是,由于Ruby是通过引用传递的,这也会影响您的第二个附件。
失败了,我会尝试将mime类型切换为application/octetstream
最后我会深入研究AM资源。另外,我会向有ISO编码文件的人发送一丝灼热的仇恨作为要求。