Pregunta

Tengo un script Ruby que genera un archivo CSV UTF8 de forma remota en una máquina Linux y luego transfiere el archivo a una máquina Windows a través de SFTP.

Entonces necesito abrir este archivo con Excel, pero Excel no obtiene UTF8, por lo que siempre necesito abrir el archivo en un editor de texto que tenga la capacidad de convertir UTF8 a ANSI.

Me encantaría hacer esto mediante programación usando Ruby y evitar el paso de conversión manual. ¿Cuál es la forma más fácil de hacerlo?

PD: Intenté usar iconv pero no tuve éxito.

¿Fue útil?

Solución

ascii_str = yourUTF8text.unpack("U*").map{|c|c.chr}.join

asumiendo que su texto realmente encaja en el conjunto de caracteres ascii.

Otros consejos

Finalmente logré hacerlo usando iconv, solo estaba estropeando los parámetros. Entonces, así es como lo haces:


require 'iconv'

utf8_csv = File.open("utf8file.csv").read

# gotta be careful with the weird parameters order: TO, FROM !
ansi_csv = Iconv.iconv("LATIN1", "UTF-8", utf8_csv).join

File.open("ansifile.csv", "w") { |f| f.puts ansi_csv }

¡Eso es!

Tuve un problema similar al intentar generar archivos CSV a partir del contenido generado por el usuario en el servidor. Encontré la gema unidecoder que hace un buen trabajo de transliteración de caracteres unicode en ascii.

Ejemplo:

"olá, mundo!".to_ascii                 #=> "ola, mundo!"
"你好".to_ascii                        #=> "Ni Hao "
"Jürgen Müller".to_ascii               #=> "Jurgen Muller"
"Jürgen Müller".to_ascii("ü" => "ue")  #=> "Juergen Mueller"

Para nuestro caso de uso simple, esto funcionó bien.

Pivotal Labs tiene una excelente publicación en el blog sobre transliteración unicode a ascii discutiendo esto con más detalle.

Desde ruby ??1.9 hay una manera más fácil:

yourstring.encode('ASCII')

Para evitar problemas con caracteres no válidos (no ASCII), puede ignorar los problemas:

yourstring.encode('ASCII', invalid: :replace, undef: :replace, replace: "_")
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top