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:
Using perl Syntax Highlighting
- #!/usr/bin/perl -w
- use CGI;
- use warnings;
- use strict;
- use locale;
- use POSIX qw(locale_h strftime);
- use locale(LC_CTYPE, "utf8");
- use open qw(:std :utf8); # flujos no declarados, en UTF-8
- my $form = new CGI;
- my $query = $form->param('query');
- my $lang = $form->param('lang');
- my $instruction="";
- $instruction.="java ";
- $instruction.="analizador $query $lang";
- my @solucion=qx ($instruction);
- my $j=0;
- print "Content-type: text/HTML;charset=UTF-8\n\n";
- while ($j<@solucion) {
- my $linea=$solucion[$j];
- print "$linea\n";
- $j++;
- }
Coloreado en 0.003 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!