Frage

Ich habe einen Ruby-Skript, das eine UTF8 CSV-Datei remote in einem Linux-Rechner erzeugt und überträgt dann die Datei auf einen Windows-Rechner durch SFTP.

Ich brauche dann mit Excel diese Datei zu öffnen, aber Excel UTF8 nicht bekommen, also muss ich immer die Datei in einem Texteditor öffnen, die die Fähigkeit UTF8 ANSI zu konvertieren hat.

Ich würde gerne diese programmatisch mit Ruby zu tun, und den manuellen Umwandlungsschritt zu vermeiden. Was ist der einfachste Weg, es zu tun?

PS:. Ich habe versucht, iconv verwenden, aber hatte keinen Erfolg

War es hilfreich?

Lösung

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

unter der Annahme, dass Ihr Text wirklich in dem ASCII-Zeichensatz paßt.

Andere Tipps

ich es endlich geschafft, es zu tun iconv mit, ich habe nur die Parameter vermasselt. Also, das ist, wie Sie es tun:


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 }

Das ist es!

Ich hatte ein ähnliches Problem versucht, CSV-Dateien von nutzergenerierten Inhalten auf dem Server zu erzeugen. Ich fand das unidecoder Juwel, das von Transliteration Unicode-Zeichen in ascii einen netten Job tut.

Beispiel:

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

Für unseren einfachen Anwendungsfall, das hat gut funktioniert.

Pivotal Labs hat eine große Blog-Post auf Unicode-Umschrift in ASCII diskutieren diese im Detail.

Da Ruby 1.9 gibt es einen einfacheren Weg:

yourstring.encode('ASCII')

Um Probleme mit ungültigem (Nicht-ASCII) zu vermeiden Zeichen, die Sie die Probleme ignorieren können:

yourstring.encode('ASCII', invalid: :replace, undef: :replace, replace: "_")
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top