por 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