Quão relevante é o UTF-7 quando se trata de analisar e-mails?


8

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?


3
UTF-7 é pouco usado em qualquer lugar exceto para dentro de protocolos de e-mail como IMAP
Charles Salvia

Respostas:


10

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 terá relevância nos sistemas de email. Em qualquer outro lugar, o UTF-8 é a melhor escolha.


2
Bem, estou analisando e-mails, a maioria dos e-mails é UTF-8, minha pergunta é quantos e-mails devo esperar como UTF-7.
pupeno

7

Graças ao comentário de Charles Salvia, encontrei um método no módulo IMAP que ajudou:

require "net/imap"
Net::IMAP.decode_utf7(mail_body)
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.