Je travaille avec des mails, et les noms et les sujets sont parfois codés en q, comme ceci :
=?UTF-8?Q?J=2E_Pablo_Fern=C3=A1ndez?=
Y a-t-il un moyen de les décoder en Ruby ? Il semble que TMail devrait s'en charger, mais il ne le fait pas.
Je travaille avec des mails, et les noms et les sujets sont parfois codés en q, comme ceci :
=?UTF-8?Q?J=2E_Pablo_Fern=C3=A1ndez?=
Y a-t-il un moyen de les décoder en Ruby ? Il semble que TMail devrait s'en charger, mais il ne le fait pas.
Je l'utilise pour analyser les sujets des emails :
Vous pouvez essayer ce qui suit :
str = "=?UTF-8?Q?J=2E_Pablo_Fern=C3=A1ndez?="
if m = /=\?([A-Za-z0-9\-]+)\?(B|Q)\?([!->@-~]+)\?=/i.match(str)
case m[2]
when "B" # Base64 encoded
decoded = Base64.decode64(m[3])
when "Q" # Q encoded
decoded = m[3].unpack("M").first.gsub('_',' ')
else
p "Could not find keyword!!!"
end
Iconv.conv('utf-8',m[1],decoded) # to convert to utf-8
end
Ruby comprend une méthode de décodage des chaînes de caractères Quoted-Printable :
puts "Pablo_Fern=C3=A1ndez".unpack "M"
# => Pablo_Fernández
Mais cela ne semble pas fonctionner sur l'ensemble de votre chaîne de caractères (y compris l'élément =?UTF-8?Q?
partie au début. Peut-être que tu peux t'en sortir à partir de là, cependant.
La solution la plus efficace et la plus récente semble être l'utilisation de l'outil de gestion de l'information. value_decode
de la méthode Mail gem .
> Mail::Encodings.value_decode("=?UTF-8?Q?Greg_of_Google?=")
=> "Greg of Google"
https://www.rubydoc.info/github/mikel/mail/Mail/Encodings#value_decode-class_method
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.