Cambiar codificación de caracteres en Ruby

Iniciado por MauriH, 20 Enero 2016, 01:05 AM

0 Miembros y 1 Visitante están viendo este tema.

MauriH

Por favor alguien ayúdeme, no puedo cambiar la codificación de carácteres de un archivo de texto, de ANSI a UTF-8, :-\ tengo instalado el interprete de ruby. Tengo conocimientos básicos en este lenguaje. He investigado pero no he encontrado mucha info en español y la que he encontrado no me ha servido. Gracias de antemano.

Eleкtro

#1
Cita de: MauriH en 20 Enero 2016, 01:05 AMCambiar codificación de caracteres en Ruby

Cita de: MauriH en 20 Enero 2016, 01:05 AMcambiar la codificación de carácteres de un archivo de texto

Una cosa es la codificación de caracteres del archivo de texto plano o Script, y otra es la codificación de caracteres asociada al intérprete de Ruby. Especifica lo que realmente necesitas modificar.

Lo primero lo puedes hacer con el Notepad mismo, Archivo -> Guardar Como... -> codificación: UTF-8
También podrás hacerlo con tu editor de texto favorito.

Para lo segundo, debes declarar la siguiente linea de comentario en la cabecera del script, es decir arriba dle todo en la primera linea del script:
Código (ruby) [Seleccionar]
# encoding: UTF-8
...aunque a partir de ruby 2.0 la codificación por defecto ya es UTF-8.

De todas formas sospecho que el problema real que tienes es que no sabes como representar en el intérprete de Ruby el set de caracteres asociado a la página de código ANSI actual de tu PC, y eso lo podrías solucionar así:
Código (ruby) [Seleccionar]
# encoding: Windows-1252

Saludos!








MauriH

#2
Cita de: Eleкtro en 20 Enero 2016, 02:18 AM
Lo primero lo puedes hacer con el Notepad mismo, Archivo -> Guardar Como... -> codificación: UTF-8

Gracias por la respuesta, justamente utilizo el notepad++ lo que quiero es lo primero q dijiste, pero en masa, tengo 17583 ficheros que quiero convertir de ansi a utf-8, si lo hago manualmente no termino nunca.

Mira, lo que ocurre en si, es que esos 17583 archivos son creados a partir de la captura de ciertas lineas de otro documento de texto que es muy largo y esta codificado en utf-8, con un script hecho en ruby que fue creado en notepad++ por tanto tb esta codificado en utf-8, de todos modos en la parte superior pongo el comentario magico #encoding: utf-8, lo que hace es practicamente copiar fragmentos del documento largo, y crear nuevos archivos con extension html para guardar esos fragmentos, lo cuales son documentos html que tienen la etiqueta <meta charset="utf-8">. Una vez hecho esto los documentos html al ser mostrados en el navegador no muestran algunos caracteres correctamente como el simbolo de interrogación abierto. Solo se ven unos cuadraditos en Internet Explorer. Claro, yo habia pensado en fragmentar el archivo largo convirtiendo la codificación a ANSI con el notepad++ para que salgan bien los carateres y luego una vez creados los archivos html en ANSI convertirlos a utf-8, pero creo q debe haber una mejor manera de hacer eso, algo así como un codigo que directamente al crear el archivo te salga en utf-8 y te muestre correctamente los caracteres. Espero haberme explicado bien.
Gracias.

Eleкtro

#3
En Ruby la manera más abstracta y sencilla de hacer la conversión tal vez sea con la librería/gema iconv.

Tengo bastante olvidado Ruby, pero te doy la idea del posible código:
Código (ruby) [Seleccionar]
# -*- coding: Windows-1252 -*-

require 'iconv'

Dir.glob('.\*.txt') do |file|

strANSI = File.open(file).read
strUTF8 = Iconv.iconv("UTF-8", "Windows-1252", strANSI).join # (To encoding, From encoding)

File.open(file, "w") { |f| f.puts strUTF8 }

end

Process.exit
__END__

(no lo he testeado)

PD: Si no tienes la librería/gema Iconv debes instalartela, y antes de eso debes instalarte el devkit de Ruby.




En lugar de desarrollar el algoritmo en un lenguaje de programación también podrías optar por hacer un simple loop a los archivos y pasarle las rutas como argumento a la siguiente aplicación command-line:


Cita de: pitoloko en 26 Marzo 2011, 13:38 PMEl comando es simple:

tec.exe "archivo.txt" -de:33
Se convierte el archivo.txt a formato de texto número 33,o el que queramos, de esta lista:


En su día la probé y me funcionó muy bien.

Saludos