Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Convertidor de Ansi a Unicode?

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio
Mensaje Mie Mar 14, 2007 11:24 am
Elvin Welten
Perlero Nuevo
Perlero Nuevo
Registrado: 23 Feb 2007
Mensajes: 5
Convertidor de Ansi a Unicode? Responder citando

Saludos a todos. Tengo un problemilla con los distintos tipos de codificación.

He hecho un programejo que se baja desde una URL con el "wget"un archivo determinado que yo renombro poniendole de extension .xml

Funciona perfectamente,el problema es que ese archivo es llamado por un swf y no lo entiende porque el xml viene codificado en código ANSI, si abro el xml y manualmente lo guardo como UNICODE funciona perfectamente pero claro no puedo automatizarlo.

hay alguna manera script ó orden en perl para convertir de ANSI a UNICODE ?He estado buscando y encuentro cosas sobre Unicode pero no doy con la solución

Muchas gracias en adelanto
Mensaje Mie Mar 14, 2007 1:33 pm
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1390
Ubicación: México
Responder citando

Hola:

Te recomiendo que cheques el módulo Encode en CPAN:
http://search.cpan.org/search?mode=module&query=Encode

Saludos
Mensaje Mie Mar 14, 2007 3:59 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4226
Ubicación: Valladolid, España
Responder citando

No lo he probado, pero quizás con esto también funcione:
Perl:
use open IN  => ":encoding(iso-8859-1)", OUT => ":utf8";


Actualización: Pues sí... funciona...
Si kk.txt contiene:
Código:
áéíóúñÑ

> hexdump -C kk.txt
00000000  e1 e9 ed f3 fa f1 d1 0a                           |........|
00000008
codificado en ansi (realmente iso-8859-1)

Con este programa:
Perl:
#!/usr/bin/perl

use open IN  => ":encoding(iso-8859-1)", OUT => ":utf8";

open ENTRADA, "<kk.txt";
open SALIDA,  ">kk1.txt";

while ( <ENTRADA> ) {
  print SALIDA;
}

close SALIDA;
close ENTRADA;
La salida es la misma, pero con caracteres en utf8:
Código:
áéíóúñÑ

> hexdump -C kk1.txt
00000000  c3 a1 c3 a9 c3 ad c3 b3  c3 ba c3 b1 c3 91 0a     |...............|
0000000f


Ultima edición por explorer el Mie Mar 14, 2007 6:32 pm, editado 1 vez
Mensaje Mie Mar 14, 2007 4:46 pm
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 498
Ubicación: Frente al monitor
Responder citando

Cita:
hay alguna manera script ó orden en perl para convertir de ANSI a UNICODE ?He estado buscando y encuentro cosas sobre Unicode pero no doy con la solución


ANSI => American National Standards Institute.

ASCII => American Standard Code for Information Interchange.

Muy diferente ¿No crees?

Bueno, lo tenía que decir.
Mensaje Jue Mar 15, 2007 4:12 am
Elvin Welten
Perlero Nuevo
Perlero Nuevo
Registrado: 23 Feb 2007
Mensajes: 5
Responder citando

Hola de nuevo,se me olvido decir que soy novato en Perl Embarassed lo digo por que he probado tú programa Explorer y tengo una petada al ejecutarlo.

el fallo es
Cita:
Unknow discipline ':encoding(iso-8859-1)' at C:/Perl/lib/open.pm line 13.

y despues me dice lo de begin failed en la línea donde tengo la instrucción
Cita:
use open IN => ":encoding(iso-8859-1)", OUT => ":utf8";


Intuyo que seguramente me falte una librería o mi sistema operativo Sad

Tengo Xp y la versión Perl5

Se me olvidaba, pongo lo que tengo dentro de mi open.pm que supongo es lo que viene por defecto.

Un saludo

Perl:
package open;
$open::hint_bits = 0x20000;

sub import {
    shift;
    die "`use open' needs explicit list of disciplines" unless @_;
    $^H |= $open::hint_bits;
    while (@_) {
        my $type = shift;
        if ($type =~ /^(IN|OUT)\z/s) {
            my $discp = shift;
            unless ($discp =~ /^\s*:(raw|crlf)\s*\z/s) {
                die "Unknown discipline '$discp'";
            }
            $^H{"open_$type"} = $discp;
        }
        else {
            die "Unknown discipline class '$type'";
        }
    }
}

1;
__END__
Mensaje Jue Mar 15, 2007 5:36 am
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4226
Ubicación: Valladolid, España
Responder citando

Pues sí... será porque estoy usando el último Perl estable, el 5.8.8.

Para saber tu versión, ejecuta perl -V

O quizás sea porque lo he hecho en Linux... mejor prueba el consejo de kidd.
Mensaje Jue Mar 15, 2007 3:32 pm
creating021
Vive para Perl en Español
Vive para Perl en Español
Registrado: 23 Feb 2006
Mensajes: 498
Ubicación: Frente al monitor
Responder citando

Ya me surgió una duda... si yo tengo X datos en utf8 y lo quiero en ASCII... que hago?

Ahora, perl trabaja con utf8 o iso-* como si fuera un texto plano?

También depende del encode local (usado por la máquina)?
Mensaje Vie Mar 16, 2007 9:44 am
Elvin Welten
Perlero Nuevo
Perlero Nuevo
Registrado: 23 Feb 2007
Mensajes: 5
Responder citando

funciona....
Tenía el Activeperl version 5.6.1 intenté subirle el modulo del encode y fui incapaz de hacerlo Embarassed así que le meti el Activeperl 5.8.8 y probé el programa de Explorer.

Ya me rula,gracias por todo Smile
Mensaje Vie Mar 16, 2007 7:27 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4226
Ubicación: Valladolid, España
Responder citando

Recomendable la lectura del principio de perllocale.
Publicar nuevo tema   Responder al tema    Foros de discusión -> Intermedio Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group