Página 1 de 1

Codificación de archivos

NotaPublicado: 2011-07-14 12:45 @573
por otorices
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.002 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!

Re: Codificación de archivos

NotaPublicado: 2011-07-14 13:47 @615
por explorer
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.

Re: Codificación de archivos

NotaPublicado: 2011-07-15 04:53 @245
por otorices
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.002 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

Re: Codificación de archivos

NotaPublicado: 2011-07-15 06:36 @316
por explorer
¿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).

Re: Codificación de archivos

NotaPublicado: 2011-07-15 06:40 @320
por otorices
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.

Re: Codificación de archivos

NotaPublicado: 2011-07-15 07:03 @336
por explorer
:!: CSV es un formato, no una codificación.

El fichero puede estar en formato CSV, codificado en UTF8 (o en cualquier otra codificación).

Re: Codificación de archivos

NotaPublicado: 2011-07-15 07:06 @337
por otorices
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.

Re: Codificación de archivos

NotaPublicado: 2011-07-17 19:00 @833
por explorer
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 :)

Re: Codificación de archivos

NotaPublicado: 2011-07-24 12:04 @545
por otorices
Buuff deja, que este verano toca currar :)
Gracias!