• Publicidad

Problema con codificación UTF-8 en CGI

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Re: Problema con codificación UTF-8 en CGI

Notapor thegame » 2012-01-10 17:48 @783

Gracias por la sugerencia, pero aún no me salen las palabras con tilde. Te muestro el código (¡ojo! Ya coloqué el "use Encode;" más arriba en el archivo)

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. .
  2. .
  3. .
  4. $query = new CGI;
  5. $query->charset('UTF-8');
  6.  
  7. print "Content-type: text/html\n\n";
  8. my $most = $ENV{'QUERY_STRING'};
  9.  
  10.  
  11. foreach ($mos) {
  12.     $most=~s/\+/ /g;
  13.     $most=~s/%([0-9i][0-9])/pack('U',hex($1))/ge;
  14.                 }
  15.  
  16. my $deco = decode utf8=>$most;
  17. my $info =buscar->new;
  18. my @data = @{ $info->traerinfo($deco) };
  19.  
  20.  
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4


Aquí me estoy trayendo de un GET que hice el texto y en $most queda la palabra, pero no me transforma la codificación. Gracias por la ayuda que me puedan dar.
thegame
Perlero nuevo
Perlero nuevo
 
Mensajes: 38
Registrado: 2011-11-08 11:19 @513
Ubicación: Venezuela

Publicidad

Re: Problema con codificación UTF-8 en CGI

Notapor explorer » 2012-01-10 19:22 @849

Ya encontré el fallo.

El problema es que estás leyendo el argumento pasado al cgi, que está codificado de forma url-encoded. Y la estás leyendo de forma directa con

my $most = $ENV{'QUERY_STRING'};

Es en esa cadena donde aparecen los caracteres así:

Ministerio+del+Poder+Popular+para+la+Ciencia+y+Tecnolog%C3%ADa

Es decir, no es que vengan codificados en utf-8, es que vienen codificados URL-encoded.

Entonces, la solución es clara: no hacer eso, sino usar el param() del módulo CGI, que hace la transformación de URL-encoded a caracteres de forma automática. Y luego haces el decode() desde utf-8, para tener una verdadera cadena Unicode.

Ahora bien... eso es lo que estás haciendo en las líneas 12 a 15 del primer código que publicaste. Quizás los caracteres estén doblemente URL-encoded...

¿No puedes crear dos programas, completos, lo más pequeños posible (sin consultas a la base de datos, sin cargar plantillas HTML, solo generando el código HTML mínimo, etc) que repita el error y nos lo mandas?

A lo mejor así vemos qué pasa.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Problema con codificación UTF-8 en CGI

Notapor explorer » 2012-01-10 23:06 @004

Añadido...

En el perlfaq 9, viene resuelta esa cuestión: How do I decode or create those %-encodings on the web? , usando el módulo URI::Escape.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Problema con codificación UTF-8 en CGI

Notapor thegame » 2012-01-11 14:02 @626

¡¡Lo arreglé!! :D ¡Era lo que tu decías!. La verdad, muchas gracias. Mira cómo quedó el código al final:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print $query->header('text/html');
  2. print $query->start_html();
  3. my $var= $query->param(traer=>$ENV{'QUERY_STRING'});
  4. my $temp=uri_unescape( $var );    
  5. my $deco = decode utf8=>$temp;
  6. my $info = buscar->new;
  7. my @data = @{ $info->traerinfo($deco) };
  8.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Te agradezco por toda la ayuda que me has dado porque este problemita me tenía la vida a cuadros.
Última edición por explorer el 2012-01-11 18:55 @830, editado 1 vez en total
Razón: Marcas de código Perl.
thegame
Perlero nuevo
Perlero nuevo
 
Mensajes: 38
Registrado: 2011-11-08 11:19 @513
Ubicación: Venezuela

Re: Problema con codificación UTF-8 en CGI

Notapor explorer » 2012-01-11 19:05 @837

Suponiendo que el parámetro del formulario que recibe la cadena se llama 'traer', ¿has probado con esto?

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print $query->header('text/html');
  2. print $query->start_html();
  3. my $var  = $query->param('traer');
  4. my $deco = decode('utf8',$var);
  5. my $info = buscar->new;
  6. my @data = @{ $info->traerinfo($deco) };
  7.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14486
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Anterior

Volver a Básico

¿Quién está conectado?

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