Decodificar una UTF8 encabezado de correo electrónico

Tengo un asunto del correo electrónico de la forma:

=?utf-8?B?T3.....?=

El cuerpo del correo electrónico es utf-8 codificación base64 – y ha decodificado bien.
Soy actual usando el Perl de Correo electrónico::MIME módulo para decodificar el mensaje.

¿Cuál es el significado de la =?utf-8 delimitador y ¿cómo extraer información de esta cadena?

5 Kommentare

  1. 36

    La codificados palabra tokens (como por RFC 2047) puede ocurrir en los valores de algunas cabeceras. Se analiza como sigue:

    =?<charset>?<encoding>?<data>?=

    Conjunto de caracteres UTF-8 en este caso, la codificación es B que significa base64 (la otra opción es Q que significa Entrecomillado Imprimible).

    A leer, en primer lugar decodificación base64, tratar como caracteres UTF-8.

    También leer los diversos Correo de Internet Rfc para más detalle, principalmente RFC 2047.

    Puesto que usted está usando Perl, Codificar::MIME::Encabezado podía ser de uso:

    SINOPSIS

    use Encode qw/encode decode/;
    $utf8   = decode('MIME-Header', $header);
    $header = encode('MIME-Header', $utf8);

    RESUMEN

    Este módulo implementa RFC 2047 Mime
    Encabezado De La Codificación. Hay 3 variantes
    la codificación de los nombres; MIME Encabezado MIME-B
    y MIME-P. La diferencia es
    se describe a continuación

                  decode()          encode()  
    MIME-Header   Both B and Q      =?UTF-8?B?....?=  
    MIME-B        B only; Q croaks  =?UTF-8?B?....?=  
    MIME-Q        Q only; B croaks  =?UTF-8?Q?....?=
  2. 17

    Creo que la codificación módulo se encarga de que con el MIME-Header de codificación, a fin de tratar este:

    use Encode qw(decode);
    my $decoded = decode("MIME-Header", $encoded);
    • Que fue muy útil, gracias. Por cierto, yo también solía imprimir encode(‘utf-8’, $headers_decoded) para mostrar decodificado encabezados correctamente, si alguien está leyendo esto mientras escribía correo secuencia de comandos.
  3. 3

    Retirar RFC2047. La » B » significa que la parte entre los dos últimos ‘?’s codificado en base64. El ‘utf-8’ significa, naturalmente, que la decodifica los datos deben ser interpretados como UTF-8.

  4. 2

    MIME::Palabras de MIME-herramientas también funcionan bien para esto. Encontré un problema con la codificación y encuentra MIME::Palabras tenido éxito en algunas cadenas donde Codificar no.

    use MIME::Words qw(:all);
    $decoded = decode_mimewords(
        'To: =?ISO-8859-1?Q?Keld_J=F8rn_Simonsen?= <[email protected]>',
    );

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Pruebas en línea