rails 3邮件宝石请帮忙!

时间:2011-05-11 09:10:55

标签: ruby-on-rails ruby ruby-on-rails-3 email encoding

好的我有2封电子邮件,其中一个主题和正文都有日语和英语,另一个似乎是在iso-8859-1中

当我执行email.subject时,它在我的控制台和浏览器中都能正常显示,并且在我的数据库(mongodb)中保存得很好。所以我认为它正确地转换为utf-8。

问题是如何让text_body和html_body做同样的事情?

如果我尝试将email.html_part.decoded保存到数据库中,我会得到一个字符串而不是utf-8错误。此外,如果我执行email.html_part.decoded.force_encoding(“UTF-8”),我仍然会收到此错误。 如果我只使用email.html_part,它可以保存到数据库中,但在查看时看起来不正确。

像这样出现

  

Content-Type:text / plain;   字符集= ISO-8859-1   Content-Transfer-Encoding:quoted-printable   内容ID:

     

= 0D   检查!= 0D   = 0D   致:joe@hotmail.com=0D   主题:阿拉斯加豪华游艇假期几乎节省了A32,000! = 0D   来自:canada@travel.co.uk=0D   日期:星期二,2011年5月10日05:39:24 -0500 = 0D   = 0D   = 0D   = 0D   = 0D   = 0D   = 0D

和日本人就这样出来了

  

Content-Type:text / plain;   字符集= ISO-2022-JP   内容传输编码:7位   内容ID:

     

来自:joe@hotmail.com   致:sales@domain.com   主题:($ B%Q%s $ r?)$ Y $ J $$!#(B)“我不会吃面包”   日期:2011年5月10日星期二21:13:55 +0000

     

通过动词动词形成否定词。例如,Pan o taberu($ B%Q%s $ r?)$ Y $ k!#(B)“我会吃面包”或“我吃面包”变成Pan o tabenai($ B%Q%s $ r?)$ Y $ J $$!#(B)“我不会吃面包”或“我不吃面包”。简单的否定形式实际上是i形容词(见下文)并且如此变化,例如, Pan o tabenakatta($ B%Q%s $ r?)$ Y $ J $ + $ C $?!#(B)“我没吃面包”。

我正在使用rails 3.0.7和ruby 1.9.2-p180

任何人都可以帮忙吗? 谢谢里克

1 个答案:

答案 0 :(得分:2)

第一封邮件是'quoted-printable',您可以使用String#unpack解压缩:

str = "=0D check!=0D =0D To: joe@hotmail.com=0D Subject: Save almost =A32,000 on a luxury Alaskan yacht holiday! =0D From: canada@travel.co.uk=0D Date: Tue, 10 May 2011 05:39:24 -0500=0D =0D =0D =0D =0D =0D =0D".unpack('M').first
=> "\r check!\r \r To: joe@hotmail.com\r Subject: Save almost \xA32,000 on a luxury Alaskan yacht holiday! \r From: canada@travel.co.uk\r Date: Tue, 10 May 2011 05:39:24 -0500\r \r \r \r \r \r \r"

您想将其声明为iso-8859-1并将其转换为utf-8:

str.force_encoding('iso-8859-1').encode('utf-8')
"\r check!\r \r To: joe@hotmail.com\r Subject: Save almost £2,000 on a luxury Alaskan yacht holiday! \r From: canada@travel.co.uk\r Date: Tue, 10 May 2011 05:39:24 -0500\r \r \r \r \r \r \r"

你可能必须对第二封邮件做同样的事情。