2011-05-11 59 views
1

好吧,我有2個電子郵件一個在主題和身體都有日語和英語,另一個似乎在iso-8859-1rails 3 mail gem請大家幫忙!

當我做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的; 的charset = ISO-8859-1 內容傳輸編碼:引號的可打印 內容ID:

= 0D 檢查= 0D = 0D 要:[email protected]=0D 主題:在豪華阿拉斯加遊艇度假中節省差不多= A32,000! = 0D 來源:[email protected]=0D 日期:星期二,2011年5月10日五時39分24秒-0500 = 0D = 0D = 0D = 0D = 0D = 0D = 0D

與日語一個出來這樣

的Content-Type:text/plain的; 字符集= ISO-2022-JP 內容傳送編碼:7位 內容ID:

來自:[email protected] 到:[email protected] 主題:($ B%Q%S $ 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 $ ??$ Y $ J $$!#(B)「我不會吃麪包」或「我不吃麪包」。普通的否定形式實際上是i形容詞(見下文)並且如此變形,例如, Pan o tabenakatta($ B%Q%s $ r?)$ Y $ J $ + $ C $?!#(B)「我沒有吃麪包」。

我使用的鐵軌3.0.7和1.9.2的紅寶石-P180

請任何人都可以在這方面幫助? 感謝里克

回答

2

第一郵件「引用可打印」,你可以使用String#unpack解壓:

str = "=0D check!=0D =0D To: [email protected]=0D Subject: Save almost =A32,000 on a luxury Alaskan yacht holiday! =0D From: [email protected]=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: [email protected]\r Subject: Save almost \xA32,000 on a luxury Alaskan yacht holiday! \r From: [email protected]\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: [email protected]\r Subject: Save almost £2,000 on a luxury Alaskan yacht holiday! \r From: [email protected]\r Date: Tue, 10 May 2011 05:39:24 -0500\r \r \r \r \r \r \r" 

您可能必須對第二封郵件做同樣的處理。

+0

謝謝你有沒有辦法從email.html_body自動獲取編碼強制?即。 force_encoding(email.htm_body.ecoding?)。encode('utf-8') – rick 2011-05-11 11:54:41

+0

檢查是否有可能直接從郵件對象獲取編碼。 – Reactormonk 2011-05-11 17:58:32