• Publicidad

Codificación de archivos

¿Ya sabes lo que es una referencia? Has progresado, el nível básico es cosa del pasado y ahora estás listo para el siguiente nivel.

Codificación de archivos

Notapor otorices » 2011-07-14 12:45 @573

Muy buenas.

Tengo varios ficheros de texto codificados en UTF-8 y quiero volcar su información un otro fichero que está codificado en Latin-1.

Para poder hacerlo, pongo la siguiente instrucción:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use open IN => ':encoding(utf-8)', OUT => ':encoding(Latin-1)';
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Pero al ejecutar el script, me dan varios errores del siguiente tipo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
"... does not map to iso-8859-1 ..."
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4


Por lo tanto, ¿cómo podría pasar el texto de un fichero codificado en UTF-8 a otro codificado en ISO-8859-1 correctamente? Si no pongo la instrucción citada antes, la ejecución del programa no devuelve ningún error, pero los caracteres no los convierte correctamente (al menos en el caso de la "ñ" y las tildes).

¡Muchas gracias!
otorices
Perlero nuevo
Perlero nuevo
 
Mensajes: 41
Registrado: 2009-04-16 13:59 @624

Publicidad

Re: Codificación de archivos

Notapor explorer » 2011-07-14 13:47 @615

No nos das todo el mensaje de error, pero ese mensaje indica que dentro del texto hay un carácter que no se puede mapear a ninguno de los caracteres del iso-8859-1. No sabemos qué carácter es (debería salir justo antes de ese mensaje).

Las opciones que hay para resolver esto depende de lo que quieres hacer con ese carácter extraño.

Te recomiendo que mires la sección Handling Malformed Data, donde podrás elegir qué hacer.

Aquí tienes un ejemplo de un programa que detecta esos casos, y con una subrutina para cambiar esos caracteres por otros.
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: Codificación de archivos

Notapor otorices » 2011-07-15 04:53 @245

Gracias por la respuesta.

Tras darle muchas vueltas, he llegado a la conclusión de que lo más fácil es pasar primero el fichero de origen (en UTF8) a
iso-8859-1 mediante el programa "iconv":

Sintáxis: [ Descargar ] [ Ocultar ]
Using bash Syntax Highlighting
  1. iconv -f UTF8 -t ISO8859-1 fichero_utf8 > fichero_latin1
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Para después poder leer y escribir en iso-5559-1:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use open IN  => ':encoding(Latin-1)', OUT => ':encoding(Latin-1)';
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
otorices
Perlero nuevo
Perlero nuevo
 
Mensajes: 41
Registrado: 2009-04-16 13:59 @624

Re: Codificación de archivos

Notapor explorer » 2011-07-15 06:36 @316

¿Rendición, eh? :D

Por estos foros hay algunos ejemplos de conversión entre juegos de caracteres.

Yo hubiera usado la función from_to() del módulo Encode. Primero, leer el fichero como una ristra de bytes (sin código), hacer la transformación, y grabarlo de la misma manera (codificación :raw).
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: Codificación de archivos

Notapor otorices » 2011-07-15 06:40 @320

Ok, explorer.
Puede que intente lo que sugieres, pero no prometo nada :lol:

De todas formas, no era estrictamente necesario que los ficheros de entrada estuvieran en UTF8, ya que ahora son datos exportados de un CSV. Por lo tanto, se pueden exportar directamente a Latin-1, y listo.

Gracias por la ayuda.
otorices
Perlero nuevo
Perlero nuevo
 
Mensajes: 41
Registrado: 2009-04-16 13:59 @624

Re: Codificación de archivos

Notapor explorer » 2011-07-15 07:03 @336

:!: CSV es un formato, no una codificación.

El fichero puede estar en formato CSV, codificado en UTF8 (o en cualquier otra codificación).
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: Codificación de archivos

Notapor otorices » 2011-07-15 07:06 @337

Has malinterpretado mi mensaje (o me he explicado yo mal).
Quería decir que desde el propio CSV tengo la posibilidad de exportar el archivo a distintas codificaciones.
otorices
Perlero nuevo
Perlero nuevo
 
Mensajes: 41
Registrado: 2009-04-16 13:59 @624

Re: Codificación de archivos

Notapor explorer » 2011-07-17 19:00 @833

Según perlutil, la distribución de Perl viene con un programa llamado pinconv, que es una versión en Perl del programa iconv. Y como es un programa en Perl... pues se puede leer su contenido.

Bueno, esto es para las largas tardes del verano :)
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: Codificación de archivos

Notapor otorices » 2011-07-24 12:04 @545

Buuff deja, que este verano toca currar :)
Gracias!
otorices
Perlero nuevo
Perlero nuevo
 
Mensajes: 41
Registrado: 2009-04-16 13:59 @624


Volver a Intermedio

¿Quién está conectado?

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