• Publicidad

Problema con ñ y acentos

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

Problema con ñ y acentos

Notapor Negrazo » 2012-01-09 14:35 @649

Hola a todos:
Tengo un reporte en el que lleva algo de texto, escrito dentro del programa, e información extraída desde una tabla de Asignaturas en MySQL.

Dentro de MySQL esta tabla esta codificada como "UTF8_general_ci".

El problema es que si le muevo a la instrucción

print stdout "Content-type: text/html\n\n";

me varían mucho las cosas. Me explico: así como está dicha instrucción, me genera el reporte siguiente:

figura01.png
figura01.png (139.25 KiB) Visto 2114 veces


Sin embargo, si cambio esa instrucción y la dejo así,

print stdout "Content-type: text/html;charset=utf-8\n\n";

me genera el reporte así,

figura02.png
figura02.png (141.63 KiB) Visto 2114 veces


como se puede apreciar, los registros extraídos de MySQL los cambia o no sé cómo llamarle.

Incluyo el código del programa por si alguien me puede ayudar.

figura03.png
figura03.png (96.39 KiB) Visto 2114 veces


De antemano, gracias.

Negrazo
Negrazo
Perlero nuevo
Perlero nuevo
 
Mensajes: 100
Registrado: 2006-12-28 12:51 @577
Ubicación: Guadalajara, Mexico

Publicidad

Re: Problema con ñ y acentos

Notapor explorer » 2012-01-09 15:53 @703

¡Madre mía, qué follón de código...!

Si usas el módulo CGI, ¿por qué usas print() para sacar código HTTP/HTML?

¿Por qué importas dos veces el código CGI?

Vamos, que te sobran la mitad de las líneas...

Por favor, no pongas pantallazos del código, sino el propio código. Es más fácil luego de manejar (y ocupa bastante menos en disco).

En cuanto al tema de las tildes...

Supongamos que la base de datos almacena los datos en UTF-8, como comentas... entonces... los datos que pasan al programa Perl siguen estando en UTF-8... y por la primera pantalla veo que los caracteres salen como UTF-8 (los famosos caracteres 'Ãx'). PERO también hay párrafos que salen bien (MARÍA DE LOS ÁNGELES). Eso quiere decir que el programa Perl está emitiendo los textos sin realizar ninguna transformación ni codificación. Si, como supongo, el navegador web está usando la codificación ISO-8859-1 por defecto, entonces vemos mal los caracteres tildados en UTF-8, pero bien los textos que están codificados en ISO-8859-1 (o similar).

Al ponerle la cabecera para indicar que sí es un flujo UTF-8, cambian las tornas: salen bien los que antes salían mal, y viceversa.

Entonces... la solución es decodificar SIEMPRE lo que recibimos (la entrada estándar, los datos de la base de datos), y codificar SIEMPRE lo que sacamos hacia el navegador.

La recomendación actual es siempre usar el módulo Encode, para realizar las transformaciones. Y si un archivo o entrada estándar sabemos que está en una determinada codificación, usaremos alguna capa E/S que haga la transformación de forma automática.
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: Problema con ñ y acentos(RESUELTO)

Notapor Negrazo » 2012-01-13 12:45 @573

Muchas gracias explorer. (Problema RESUELTO)
Ya usé el módulo Encode con una de sus opciones y ya todo funciona muy bien.

Siempre hay algo nuevo que aprender.

Saludos desde Guadalajara, Mexico.

Negrazo
Negrazo
Perlero nuevo
Perlero nuevo
 
Mensajes: 100
Registrado: 2006-12-28 12:51 @577
Ubicación: Guadalajara, Mexico


Volver a Básico

¿Quién está conectado?

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

cron