Perl – convertir ISO-8859-1 a UTF-8

perl-pdfPerl usa como codificación de caracteres a UTF-8 de forma predeterminada, sin embargo es común que perl tenga que interactuar con otros juegos de caracteres provenientes de fuentes de datos externos como archivos de texto, csv o bases de datos donde los caracteres sean representados típicamente en ISO-8859-1 también conocido como Latin1 si provienen de sistemas windows,colocándonos así en la tarea de tener que convertir ó transformar la codificación de los caracteres con los que estemos trabajando para así cumplir nuestros objetivos de programación.

El principal problema o dolor de cabeza de datos codificados en Latin1 presentes en entornos utf8 es la representación de caracteres especiales como (ñ y Ñ) y las letras acentuadas (con acentos) como [á,é,í,ó,ú,Á,É,Í,Ó,Ú,à,é,Á,É] que son mostrados con algo similar a: �.

El siguiente perl script usa el módulo Encode para transformar caracteres ISO-8859-1 provenientes de una base de datos MySQL a UTF-8, que para los efectos de esta entrada serán imprimidos por pantalla tanto la data original como la convertida en UTF-8.

#!/usr/bin/perl -w
use DBI;
use Encode;

$bd = DBI->connect("DBI:mysql:basededatos:host","usuario", "clave", { PrintError => 1}) || die $DBI::errstr;

$sth=$bd->prepare('SELECT * FROM noticias order by id asc limit 2000');
$sth->execute();

while(@consulta =$sth->fetchrow_array()){
print "id: ".++$incremeta_id;
print " Titulo original: ".$consulta[1]." - ";
print "Convertido UTF-8: ".encode('utf-8', $consulta[1])."\n";
}

print "\t\t\n $incremeta_id registros convertidos a UTF-8\n";

$sth->finish;

La función encode que vemos en la linea 13 recibe dos (2) parámetros. El primero el juego de caracteres que necesitamos y el segundo la cadena de texto (string) a realizar la conversión.

$utf8-string = encode("utf8", $string);
lenin@i5:~/Escritorio/convert$ time perl test-encode.pl
id: 1990 Titulo original: Se entreg� este a�o mil becas de Maestr�a y Doctorado – Convertido UTF-8: Se entregó este año mil becas de Maestría y Doctorado
id: 1991 Titulo original: Vecinos: “Grabaci�n aclara m�s la masacre” – Convertido UTF-8: Vecinos: “Grabación aclara más la masacre”
id: 1992 Titulo original: El inc�modo muerto – Convertido UTF-8: El incómodo muerto
id: 1993 Titulo original: Explosi�n de artefacto dej� tres heridos – Convertido UTF-8: Explosión de artefacto dejó tres heridos
id: 1994 Titulo original: Crudo repunt� a 26,60 d�lares por barril – Convertido UTF-8: Crudo repuntó a 26,60 dólares por barril
id: 1995 Titulo original: Peri�dico presentar� �Memoria – Convertido UTF-8: Periódico presentará “Memoria
id: 1996 Titulo original: Derechos del ni�o – Convertido UTF-8: Internet: Derechos del niño
id: 1997 Titulo original: Recolecci�n de basura – Convertido UTF-8: Recolección de basura
id: 1998 Titulo original: “No m�s cuentos” – Convertido UTF-8: “No  más cuentos”
id: 1999 Titulo original: GALER�A DE IM�GENES – Convertido UTF-8: GALERÍA DE IMÁGENES
id: 2000 Titulo original: Alcald�a entreg� donativo – Convertido UTF-8: Alcaldía entregó donativo
2000 registros convertidos a UTF-8
real 0m0.666s
user 0m0.052s
sys 0m0.020s
lenin@i5:~/Escritorio/convert$

Como resultado tenemos ya los caracteres legibles por pantalla, preparados para ser procesados, representados en otros medios ó almacenados en correcto UTF-8. El ejemplo fue realizado en Debian GNU-Linux.

Anuncios

Un comentario en “Perl – convertir ISO-8859-1 a UTF-8

  1. Tengo un problema estoy migrando de isis a marc 21 y no que conversión hacer.Ya probé esta y nada.La cuestión es que en la base esta lam(con tilde en la a) y cuando tomo el valor me pone á,así con los demás caracteres especiales.Por favor si sabes como resolver esto ayudame.Gracias de antemano.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s