elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Introducción a Git (Primera Parte)


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  Cambiar codificación de caracteres en Ruby
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Cambiar codificación de caracteres en Ruby  (Leído 2,606 veces)
MauriH

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Cambiar codificación de caracteres en Ruby
« en: 20 Enero 2016, 01:05 am »

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.


En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Cambiar codificación de caracteres en Ruby
« Respuesta #1 en: 20 Enero 2016, 02:18 am »

Cambiar codificación de caracteres en Ruby

cambiar 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
  1. # 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
  1. # encoding: Windows-1252

Saludos!


« Última modificación: 20 Enero 2016, 02:30 am por Eleкtro » En línea

MauriH

Desconectado Desconectado

Mensajes: 12


Ver Perfil
Re: Cambiar codificación de caracteres en Ruby
« Respuesta #2 en: 20 Enero 2016, 02:56 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.
« Última modificación: 20 Enero 2016, 03:15 am por MauriH » En línea

Eleкtro
Ex-Staff
*
Desconectado Desconectado

Mensajes: 9.788



Ver Perfil
Re: Cambiar codificación de caracteres en Ruby
« Respuesta #3 en: 20 Enero 2016, 03:42 am »

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
  1. # -*- coding: Windows-1252 -*-
  2.  
  3. require 'iconv'
  4.  
  5. Dir.glob('.\*.txt') do |file|
  6.  
  7. strANSI = File.open(file).read
  8. strUTF8 = Iconv.iconv("UTF-8", "Windows-1252", strANSI).join # (To encoding, From encoding)
  9.  
  10. File.open(file, "w") { |f| f.puts strUTF8 }
  11.  
  12. end
  13.  
  14. Process.exit
  15. __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:


El comando es simple:

Código:
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
« Última modificación: 20 Enero 2016, 03:47 am por Eleкtro » En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines