如何在Ruby中解码RFC 2047编码的电子邮件头?
我有以下标题:如何在Ruby中解码RFC 2047编码的电子邮件头?,ruby,encoding,tmail,Ruby,Encoding,Tmail,我有以下标题: From: =?iso-8859-1?Q?Marta_Falc=E3o?= <marta.falcao@example.com.br> 我可以用什么把它变成“Marta Falcão”?感谢他的评论,这让我有了两个选择: 安装并调用Rfc2047。解码(标题) 安装并调用TMail::Unquoter.unquote\u和\u convert\u to(header,'utf-8')或更好的TMail::Address.parse(header).friendly,
From: =?iso-8859-1?Q?Marta_Falc=E3o?= <marta.falcao@example.com.br>
我可以用什么把它变成“Marta Falcão”?感谢他的评论,这让我有了两个选择:
Rfc2047。解码(标题)
TMail::Unquoter.unquote\u和\u convert\u to(header,'utf-8')
或更好的TMail::Address.parse(header).friendly
,后者去掉了
部分Mail::Encodings.value\u decode(str)
或
Mail::Encodings.unquote_和_convert_to(str,to_encoding)
使用Ruby实现并不难:
模块Rfc2047
令牌=/[\041\043-\047\052\053\055\060-\071\101-\132\134\136\137\141-\176]+/.冻结
编码的\u TEXT=/[\041-\076\100-\176]+/.freeze
编码的单词=/=\?(?{TOKEN})\?(?[QB])\?(?{ENCODED\U TEXT})\?=/i.freeze
玛尔塔·法尔科班
更新
当前具有可能无法正确解码字符串的
如果这真的困扰您,您可以尝试new\u rfc\u 2047
:
$ gem install new_rfc_2047
$ ruby -rrfc_2047 -e 'puts Rfc2047.decode "From: =?iso-8859-1?Q?Marta_Falc=E3o?= <marta.falcao@example.com.br>"'
From: Marta Falcão <marta.falcao@example.com.br>
$gem安装新的\u rfc\u 2047
$ruby-rrfc_2047-e'puts rfc247.decode“From:=?iso-8859-1?Q?Marta_Falc=E3o?=”'
发件人:Marta Falcão
由于mikel/mail的源代码对我来说太复杂了,无法进行修改,因此我为它制作了自己的gem
Gem源代码在这里:头使用RFC 2047中的方案进行编码。也许这对搜索词很有帮助。的确如此!不仅如此,搜索2047的TMail源代码还发现了一种不用添加新依赖项就可以使用的方法。干得好,@RolandIllig:)第一个对我来说很好!gem'rfc247',在我的gem列表中,重新启动,并调用所述方法。。他很有魅力。非常感谢!仅供参考,Mail::Encodings#value#u decode中存在编码错误。如果你遇到这个错误,我的回答会有帮助。
$ gem install new_rfc_2047
$ ruby -rrfc_2047 -e 'puts Rfc2047.decode "From: =?iso-8859-1?Q?Marta_Falc=E3o?= <marta.falcao@example.com.br>"'
From: Marta Falcão <marta.falcao@example.com.br>