我有UTF-8字符串:Website • Facebook那是中间的子弹•0xE2 0x80 0xA2
此值正确存储在数据库中,并使用Rails 3和ruby 1.9.3(使用默认设置)正确显示在屏幕上。

我正在尝试通过HTML电子邮件发送此邮件,但是当一切都说完之后,接收端会看到垃圾:

这背后的代码很简单,我有一个ActionMailer子类(默认情况下使用UTF-8)设置来发送在布局中使用UTF-8内容编码的HTML电子邮件:
email.html.erb布局文件:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="X-UA-Compatible" content="chrome=1,IE=9" />
    <meta charset="utf-8">
    <%= stylesheet_link_tag "application", :media => "all" %>
</head>
<body class='email'>
    <%= yield %>
</body>
</html>

内容使用与呈现网页相同的 View ,重要的一行是:
<p><%= simple_format strip_tags(comment.text) %></p>

我尝试了force_encodingencode的许多排列,将多余的UTF-8编码应用于ActionMailer子类, View 文件的顶部以及其他许多功能,但似乎没有任何效果。

the raw html message通过Apple Mail查看的重要HTML是:
Website =EF=BF=BD=EF=BF=BD=EF=BF=BD=EF=BF=BD=EF=BF=BD=EF=BF=BD=EF=BF=BD=EF=BF=BD=EF=BF=BD Facebook

如果您查看原始消息(在上面链接),则纯文本消息不会发生这种情况,只有HTML消息会发生这种情况。

TL; DR

ActionMailer正在替换应为UTF-8项目符号的字符:0xE2 0x80 0xA2与垃圾:0xEF 0xBF 0xBD 0xEF 0xBF 0xBD 0xEF 0xBF 0xBD 0xEF 0xBF 0xBD 0xEF 0xBF 0xBD 0xEF 0xBF 0xBD 0xEF 0xBF 0xBD 0xEF 0xBF 0xBD 0xEF 0xBF 0xBD 0xEF 0xBF 0xBD
我怎样才能解决这个问题?

最佳答案

检查您是否使用gem来内联CSS,例如premailer-rails3

According to this post,这可能会损坏您的ActionMailer电子邮件中的UTF-8字符。

尝试用actionmailer_inline_css gem之类的东西删除或替换该gem。

关于ruby-on-rails - ActionMailer HTML编码 hell -特殊字符替换为垃圾,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/13940148/

10-10 11:12