Domanda

Ho uno script Ruby che genera un file CSV UTF8 in remoto in una macchina Linux e quindi trasferisce il file su una macchina Windows tramite SFTP.

Devo quindi aprire questo file con Excel, ma Excel non ottiene UTF8, quindi ho sempre bisogno di aprire il file in un editor di testo che ha la capacità di convertire UTF8 in ANSI.

Mi piacerebbe farlo a livello di codice usando Ruby ed evitare il passaggio di conversione manuale. Qual è il modo più semplice per farlo?

PS: ho provato a usare iconv ma non ho avuto successo.

È stato utile?

Soluzione

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

supponendo che il tuo testo si adatti davvero al set di caratteri ASCII.

Altri suggerimenti

Finalmente sono riuscito a farlo usando iconv, stavo solo incasinando i parametri. Quindi, ecco come lo fai:


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 }

Questo è tutto!

Ho avuto un problema simile nel tentativo di generare file CSV dal contenuto generato dall'utente sul server. Ho trovato la unidecoder che fa un buon lavoro di traslitterazione dei caratteri Unicode in ascii.

Esempio:

"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"

Per il nostro semplice caso d'uso, ha funzionato bene.

Pivotal Labs ha un ottimo post sul blog traslitterazione unicode in ascii discuterne in modo più dettagliato.

Dal rubino 1.9 esiste un modo più semplice:

yourstring.encode('ASCII')

Per evitare problemi con caratteri non validi (non ASCII) è possibile ignorare i problemi:

yourstring.encode('ASCII', invalid: :replace, undef: :replace, replace: "_")
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top