¿Qué tan relevante es UTF-7 cuando se trata de analizar correos electrónicos?

7

Recientemente implementé correos electrónicos entrantes para una aplicación y, ¿abrí las puertas del infierno? Desde entonces, cada dos días llega un correo electrónico que hace que la aplicación falle de una manera diferente.

Una de esas cosas son los correos codificados como UTF-7. La mayoría de los correos electrónicos vienen como ASCII, algunas de las codificaciones en latín o, afortunadamente, UTF-8.

Los mensajes de error de Hotmail (como la dirección de correo electrónico no existe o la cuota se ha excedido) parecen venir como UTF-7. Desafortunadamente, UTF-7 no es una codificación que Ruby entiende:

> "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)> 

Mi aplicación no falla, en realidad maneja el correo electrónico bastante bien, pero me envía una notificación sobre el posible error.

Pasé un tiempo buscando en Google y no puedo encontrar a nadie que haya implementado la conversión, al menos no como Ruby 1.9.3 Encoding :: Converter.

Entonces, mi pregunta es que, como nunca recibí un correo electrónico con contenido real, de una persona real, en UTF-7, ¿qué tan relevante es esa codificación? ¿Puedo ignorarlo de forma segura?

    
pregunta pupeno 06.09.2012 - 18:25

2 respuestas

10

La única característica relevante de UTF-7 (sobre UTF-8, por ejemplo) es que se trata de una codificación de 7 bits, al igual que el viejo ASCII. Eso significa que funciona en un sistema que no limpieza de 8 bits .

El único sistema a gran escala en el que esto es importante hoy en día es el de los servidores de correo (no me preguntes por qué no solucionaron este problema hace 10 a 20 años, la mayoría de los servidores sí lo hicieron, pero algunos aparentemente no lo hicieron).

Entonces: UTF-7 solo tendrá relevancia en los sistemas de correo electrónico. En cualquier otro lugar, UTF-8 es la mejor opción.

    
respondido por el Joachim Sauer 06.09.2012 - 19:09
7

Gracias al comentario de Charles Salvia, encontré un método en el módulo IMAP que ayudó:

require "net/imap"
Net::IMAP.decode_utf7(mail_body)
    
respondido por el pupeno 06.09.2012 - 19:36

Lea otras preguntas en las etiquetas