Eu recentemente implementei e-mails recebidos para um aplicativo e, garoto, eu abri os portões do inferno? Desde então, a cada dois dias chega um email que faz com que o aplicativo falhe de uma maneira diferente.
Uma dessas coisas são os e-mails codificados como UTF-7. A maioria dos emails vem como ASCII, algumas das codificações latinas ou, felizmente, UTF-8.
As mensagens de erro do Hotmail (como endereço de email não existe ou cota excedida) parecem vir como UTF-7. Infelizmente, UTF-7 não é uma codificação que Ruby entende:
> "hello world".encode("utf-8", "utf-7")
Encoding::ConverterNotFoundError: code converter not found (UTF-7 to UTF-8)
> Encoding::UTF_7
=> #<Encoding:UTF-7 (dummy)>
Meu aplicativo não falha, ele realmente lida com o email muito bem, mas me envia uma notificação sobre o possível erro.
Passei algum tempo pesquisando no Google e não consigo encontrar ninguém que implementou a conversão, pelo menos não como um Ruby 1.9.3 Encoding :: Converter.
Portanto, minha pergunta é: como nunca recebi um email com conteúdo real, de uma pessoa real, em UTF-7, qual a relevância dessa codificação? posso ignorá-lo com segurança?
fonte
Respostas:
O único recurso relevante do UTF-7 (acima do UTF-8, por exemplo) é que é uma codificação de 7 bits, assim como o bom e velho ASCII. Isso significa que ele funciona em um sistema que não é limpo de 8 bits .
O único sistema de larga escala em que isso ainda importa hoje são os servidores de correio (não me pergunte por que eles não resolveram esse problema há 10 a 20 anos, a maioria dos servidores resolveu, mas alguns ostensivamente ainda não o fizeram).
Portanto: o UTF-7 só terá relevância nos sistemas de email. Em qualquer outro lugar, o UTF-8 é a melhor escolha.
fonte
Graças ao comentário de Charles Salvia, encontrei um método no módulo IMAP que ajudou:
fonte