• Publicidad

MIME::QuotedPrint

Aquí encontrarás todo lo que sea específicamente acerca de módulos de Perl. Ya sea que estás compartiendo tu módulo, un manual o simplemente tienes una duda acerca de alguno.

MIME::QuotedPrint

Notapor reLlene » 2014-02-21 10:00 @458

Hola, chicos, a ver si me pueden dar una mano...

Estoy queriendo decodificar unos correos que me descargo, puesto que éstos vienen con codificación Quoted Printable (del Content-Transfer-encoding) para luego procesar los datos que vienen en este correo para varias cosas. Lo que lo encuentro raro es que a la hora de hacer una prueba sencilla como la siguiente:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2. use MIME::QuotedPrint;
  3.  
  4. $string = 'electr=C3=B3nico';
  5. $string_decoded = decode_qp($string);
  6. print "$string\n";
  7.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. root@reLlene:/ # perl root/Dev/test.pl
  2. electrónico
  3.  
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


NO tengo problema alguno.
Luego si averiguo la codificación del archivo resultante vía chardet

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. root@reLlene:/ # perl root/Dev/test.pl > archivo
  2. electrónico
  3.  
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Me devuelve una "locura" de estas
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. root@reLlene:/ # chardet archivo
  2. temp: <span style="font-weight: bold">GB2312</span> con una confianza del<span style="font-weight: bold"> 99%</span>
  3.  
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Nada más ni nada menos que el set de caracteres de la República Popular de China. ¡Ja,ja!

AHORA... mi correo es algo grandecito y la palabra test con la que hice la prueba más arriba ('electr=C3=B3nico') es una de las tantísimas palabras de ese correo. Entonces, REPITO la operación sobre TODO el (basto y extenso) string PERO consiguiendo una codificación, ahora, TIS-620 (tailandesa) con una confianza del 88% y claro, no pudiendo abrir este archivo porque ¡¡los editores me arrojan errores a la hora de detectar la codificación del mismo!!

Y más raro otros casos donde meto todo un texto de entrada para decodificar con decode_qp
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
  1. ertido)</TH><TH align=3D left  scope=3D col >Producto activo</TH><TH align=
  2. =3D left  scope=3D col >Propietario de la oportunidad</TH><TH align=3D righ=
  3. t  scope=3D col >Empleados</TH><TH align=3D left  scope=3D col >Correo elec=
  4. tr=C3=B3nico</TH></tr>
  5.  
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

y al ver la codificación resultante me sale utf-8 con una confianza del 100 %.

En definitiva, no entiendo de qué se vale para pasar a una u otra codificación. Estuve echándole un ojo a los saltos de línea a ver si se trataba de esto pero parece que no.

Agradezco cualquier rayito de luz sobre esto :roll:

¡¡ Un saludete !!
Sexo : unzip ; strip ; touch ; grep ; finger ;mount ; fsck ; more ; yes ; umount ; sleep.
Avatar de Usuario
reLlene
Perlero nuevo
Perlero nuevo
 
Mensajes: 97
Registrado: 2012-06-04 07:16 @344

Publicidad

Re: MIME::QuotedPrint

Notapor reLlene » 2014-02-21 11:26 @518

Ahora veo que pareciera que lo hace cuando se le antoja sin razón aparente... O me devuelve alguna de las mencionadas más arriba o la ISO-8859-2 (confidence: 0.80), ya no sé qué pensar :shock:
Sexo : unzip ; strip ; touch ; grep ; finger ;mount ; fsck ; more ; yes ; umount ; sleep.
Avatar de Usuario
reLlene
Perlero nuevo
Perlero nuevo
 
Mensajes: 97
Registrado: 2012-06-04 07:16 @344

Re: MIME::QuotedPrint

Notapor explorer » 2014-02-22 00:02 @043

Lo normal es que la codificación del archivo esté indicada en el propio mensaje. Por ejemplo, esto es lo que veo en alguno de mis mensajes:

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
--047d7b6da82803252204def573c6
Content-Type: text/plain; charset=ISO-8859-1
Content-Transfer-Encoding: quoted-printable

fyi

---------- Mensaje reenviado ----------
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4
La primera línea es la división entre partes (es un mensaje MIME multiparte). La siguiente es la que indica el tipo de archivo y su codificación. Y la tercera línea indica la codificación de la transferencia.

Así que, con el módulo MIME::QuotedPrint y Encode, sería suficiente.

Bueno... en realidad... no necesitas nada de eso...

Las MIME-tools son capaces de abstraer buena parte de toda esa complejidad, reduciendo mucho el código necesario.

En la documentación de las MIME-tools se recuerda que es bueno mirar la carpeta de ejemplos de la distribución. Uno de los ejemplos es, justamente, un programa que sirve para extraer todas las partes de un correo electrónico, ya decodificadas.

En él verás que todo el trabajo se reduce a crear un objeto MIME::Parser, y él se encargará de (casi) todo.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: MIME::QuotedPrint

Notapor reLlene » 2014-02-26 10:58 @499

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
------=_Part_30717_206860277.1393219382465
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: quoted-printable
 
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Bueno, como detallo arriba la codificación la puedo ver y se trata de la UTF-8 y lo pude resolver con VOLVER a decodificar lo (YA) decodificado por el modulo MIME::QuotedPrint, es decir:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use MIME::QuotedPrint;
  2. use Encode qw(decode);
  3.  
  4. $cadena_email_decodificada = decode_qp($cadena_email);
  5. $cadena_email_re_decodificada = decode($cadena_email_decodificada);
  6.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


El problema fue que al comenzar a ver correctamente los caracteres (anteriormente mal interpretados), existían otros que seguían mostrándose de forma errónea, con su black diamond (�) y allí perdí GRAN parte del tiempo rascando mi cabeza (¡ja,ja!) y finalmente me entero gracias a ESTE thread que el problema radicaba sobre la "mala" decodificación de la aplicación del lado del servidor de correo y es por eso que estos se mostraban de la forma EF=BF=BD :lol: ahora lo lamentable es que parece que no hay solución desde el lado del cliente y yo, estos datos, los quiero volcar a una DB :cry:

Por cierto, ahora un poco más frio, le echaré un ojo a la otra alternativa que me presentaste.

¡¡Gracias, como siempre, querido explorer!! :)
Sexo : unzip ; strip ; touch ; grep ; finger ;mount ; fsck ; more ; yes ; umount ; sleep.
Avatar de Usuario
reLlene
Perlero nuevo
Perlero nuevo
 
Mensajes: 97
Registrado: 2012-06-04 07:16 @344


Volver a Módulos

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 6 invitados