Konvertieren von UTF-8 in der ANSI Ruby
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
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: "_")