5 Stimmen

Lesen von ASCII-kodierten Dateien mit Ruby 1.9 in einer UTF-8-Umgebung

Ich habe gerade ein Upgrade von Ruby 1.8 auf 1.9 durchgeführt, und die meisten meiner Textverarbeitungsskripte schlagen jetzt mit dem Fehler invalid byte sequence in UTF-8 . Ich muss entweder die ungültigen Zeichen entfernen oder angeben, dass Ruby stattdessen die ASCII-Kodierung verwenden soll (oder die Kodierung der C stdio Schreibfunktionen, mit denen die Dateien erzeugt wurden) - wie würde ich vorgehen, um eines dieser Dinge zu tun?

Vorzugsweise letzteres, denn (soweit ich das beurteilen kann) ist mit den Dateien auf der Festplatte alles in Ordnung - wenn es seltsame, ungültige Zeichen gibt, erscheinen sie nicht in meinem Editor...

1voto

telent Punkte 1765

Wie ist Ihr Gebietsschema in der Shell eingestellt? In Linux-basierten Systemen können Sie dies überprüfen, indem Sie die locale und ändern Sie ihn z.B. durch

$ export LANG=en_US

Ich vermute, dass Sie Gebietsschema-Einstellungen mit UTF-8-Kodierung verwenden und dies Ruby dazu veranlasst, anzunehmen, dass die Textdateien nach den UTF-8-Kodierungsregeln erstellt wurden. Sie können dies sehen, indem Sie versuchen

$ LANG=en_GB ruby -e 'warn "foo".encoding.name'
US-ASCII
$ LANG=en_GB.UTF-8 ruby -e 'warn "foo".encoding.name'
UTF-8

Für eine allgemeinere Behandlung, wie sich die String-Kodierung in Ruby 1.9 geändert hat, empfehle ich http://blog.grayproductions.net/articles/ruby_19s_string

(Code-Beispiele gehen von Bash oder einer ähnlichen Shell aus - C-Shell-Derivate sind anders)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X