• Publicidad

Error codificación llamando a un java con user www-data

Todo lo relacionado con el desarrollo Web con Perl: desde CGI hasta Mojolicious

Error codificación llamando a un java con user www-data

Notapor Vertik » 2012-12-20 09:10 @424

Hola,

El asunto es un poco extenso pero no sabia como llamar al problema.

¡Os explico!

Tengo un script en Perl que ejecuta mediante el comando qx() un programa en Java.
Este programa en stdout la solución.

Bien, pues este script ejecutado por terminal, funciona correctamente (muestra los datos bien).
Ejecutado como www-data en el terminal también funciona bien, pero desde el browser, las letras con tilde las transforma a '??'.

Os pongo parte del código, para que veáis lo simple que es la idea:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl -w
  2.  
  3. use CGI;
  4. use warnings;
  5. use strict;
  6. use locale;
  7. use POSIX qw(locale_h strftime);
  8. use locale(LC_CTYPE, "utf8");
  9.  
  10. use open      qw(:std :utf8);    # flujos no declarados, en UTF-8
  11. my $form = new CGI;
  12.  
  13. my $query  = $form->param('query');
  14. my $lang  = $form->param('lang');
  15.  
  16.  
  17. my $instruction="";
  18. $instruction.="java ";
  19. $instruction.="analizador $query $lang";
  20.  
  21. my @solucion=qx ($instruction);
  22. my $j=0;
  23.  
  24. print "Content-type: text/HTML;charset=UTF-8\n\n";
  25. while ($j<@solucion) {
  26.         my $linea=$solucion[$j];
  27.         print "$linea\n";
  28.         $j++;
  29. }
Coloreado en 0.004 segundos, usando GeSHi 1.0.8.4


Lo raro, es que desde el terminal con mi usuario ejecuto el perl y perfecto en las tildes, 'ñ' y lo que quieras. Desde el terminal con el usuario www-data, idéntico, pero desde la aplicación web no, ¡y ya no sé por qué! En un momento pensaba que era por la variable locale, pero al visualizarlo bien desde los dos usuarios, ya me ha matado.

Si tenéis alguna idea, ¡mil gracias!
Vertik
Perlero nuevo
Perlero nuevo
 
Mensajes: 41
Registrado: 2011-04-20 06:32 @314

Publicidad

Re: Error codificación llamando a un java con user www-data

Notapor explorer » 2012-12-20 12:40 @569

Creo que el problema está en que el servidor web tendrá definido un locale POSIX=C en el momento del arranque (míralo en el /etc/init.d/). Pero esto no debería importar, porque desde dentro de nuestro programa podemos cambiar de locale. Lo malo es que creo que no estás haciendo ese cambio...

Reescrito el comienzo...
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use strict;
  3. use warnings;
  4. use CGI;
  5. #use locale;                   # no es necesario porque vamos a usar setlocale() a continuación
  6. use POSIX qw(locale_h strftime);
  7. setlocale(LC_CTYPE, "utf-8");  # atención: es setlocale(), NO use locale()
  8. use open  qw(:std :utf8);      # flujos no declarados, en UTF-8
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4

Y luego, en la línea 24, es mejor que la escribas así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. print $form->header(
  2.     -type    => 'text/html',
  3.     -charset => 'utf-8',
  4. );
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Lo que sigue no está formateado como HTML, así que te aconsejo que uses las facilidades de CGI.pm para hacerlo así.

Más información en perldoc -f locale y perldoc perllocale
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Error codificación llamando a un java con user www-data

Notapor Vertik » 2012-12-21 04:38 @234

¡Hola, explorer!

¡Genial! ¡Funcionó! Era eso mismo, el posix=C

Gracias
Vertik
Perlero nuevo
Perlero nuevo
 
Mensajes: 41
Registrado: 2011-04-20 06:32 @314

Re: Error codificación llamando a un java con user www-data

Notapor explorer » 2012-12-21 06:10 @299

¿No se te habrá ocurrido quitarlo, verdad?
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14476
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España


Volver a Web

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado