почтовый камень rails 3, пожалуйста, помогите!

#ruby-on-rails #ruby #ruby-on-rails-3 #email #encoding

#ruby-on-rails #ruby #ruby-on-rails-3 #Адрес электронной почты #кодирование

Вопрос:

Хорошо, у меня есть 2 электронных письма, в одном есть японский и английский как в теме, так и в теле, а другое, похоже, в iso-8859-1

Когда я создаю email.subject, он правильно отображается как в моей консоли, так и в браузере, а также отлично сохраняется в моей базе данных (mongodb). итак, я предполагаю, что его преобразование в utf-8 выполняется правильно.

Проблема в том, как заставить text_body и html_body делать то же самое?

Если я пытаюсь сохранить email.html_part.decoded в базе данных, я получаю ошибку string, отличную от utf-8. Также, если я сделаю email.html_part.decoded.force_encoding («UTF-8») я все еще получаю эту ошибку. Если я делаю просто email.html_part, это позволяет мне сохранять в базу данных, но при просмотре выглядит некорректно.

получается вот так

Тип содержимого: текстовый / обычный; кодировка = iso-8859-1 Кодировка содержимого для передачи: в кавычках-идентификатор содержимого для печати:

=0D проверить!=0D =0D Кому: joe@hotmail.com=0D Тема: Сэкономьте почти 32 000 австралийских долларов на роскошном отдыхе на яхте на Аляске! =0D от: canada@travel.co.uk=0D Дата: Вт, 10 мая 2011 05:39:24 -0500=0D =0D =0D =0D =0D =0D =0D

и японский вариант выглядит следующим образом

Тип содержимого: текстовый / обычный; кодировка = iso-2022-jp Content-Transfer-Encoding: 7-битный идентификатор содержимого:

От: joe@hotmail.com Кому: sales@domain.com Тема: ($B% Q%s $ r?)$ Y $ J $ $!#(B) «Я не буду есть хлеб» Дата: Вт, 10 мая 2011 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:

Первое письмо «доступно для печати в кавычках», которое вы можете распаковать с помощью 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.comr Subject: Save almost xA32,000 on a luxury Alaskan yacht holiday! r From: canada@travel.co.ukr Date: Tue, 10 May 2011 05:39:24 -0500r 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.comr Subject: Save almost £2,000 on a luxury Alaskan yacht holiday! r From: canada@travel.co.ukr Date: Tue, 10 May 2011 05:39:24 -0500r r r r r r r"
  

Вероятно, вам придется сделать то же самое со вторым письмом.

Комментарии:

1. спасибо, есть ли способ автоматически принудительно использовать кодировку из email.html_body? ie . принудительное кодирование (email.htm_body.ecoding?).encode(‘utf-8’)

2. Проверьте, есть ли возможность получить кодировку непосредственно из объекта mail.