2010-11-20 9 views
3

Ich habe die folgende Datei erzeugtWie arbeite ich mit UTF-16LE Quellcode in Ruby?

ruby ./test.rb 

keine Ergebnisse in UTF-16LEtest.rb Codierung genannt

# encoding: UTF-16LE 

test = "test!" 
p test 

es mit dem folgenden Befehl Was ich hier fehlt?


Falls sich jemand fragt, der Grund, warum ich versuche, meine Quelle in UTF-16LE Codierung eingestellt ist, dass ich mit UTF-16LE Ein- und Ausgabedateicodierungen arbeite. Mein Eindruck ist, dass, wenn ich die Kodierung richtig einstelle, wenn ich eine Datei einlese und die Kodierung richtig setze, wenn ich die # encoding: richtig in meiner Quelle ausfülle, sollte alles funktionieren. Wenn irgendjemand etwas mit diesem (oder einem einfacheren Weg) falsch sieht, fühlen Sie sich frei, mich zu informieren.

+0

Schreiben Sie Ihre Quelle Code in einer Codierung hat keinen Einfluss darauf, welche Codierung Sie lesen oder eine Datei schreiben. –

+0

@Greg Also, was Sie sagen, ist, dass, wenn mein Quellcode UTF-8 ist und ich eine Zeichenfolge in eine UTF-16LE-Datei schreibe, wird es automatisch in die richtige Codierung konvertiert? – kubi

+0

Nein. Es wird nicht automatisch konvertiert. Sie müssen Ruby sagen, wofür die Datei-I/O kodiert ist. Siehe Mladen Jablanović's Antwort, da er Sie in die richtige Richtung weist. –

Antwort

7

Schreiben Sie Ihr Programm in UTF-16, um UTF-16-Dateien zu verarbeiten, klingt wie die Benennung Ihrer Variablen in russischer Sprache, um eine russische Website zu erstellen. :)

Ruby 1.9 unterstützt String-Kodierungen, und James Gray hat eine excellent series von Artikeln zu dem Thema - ich betrachte sie als Referenzhandbuch für Kodierungen in Ruby.

Kurz gesagt, können Sie die Codierung Ihrer Eingabedateien angeben, wenn Sie sie öffnen:

s = '' 
File.open('utf16le.txt', 'rb:UTF-16LE') do |f| # here you set the encoding 
    s = f.read 
end 
p s.encoding 
#=> #<Encoding:UTF-16LE> 
p s.length 
#=> 19 
p s 
#=> "test\nmladen\n\u0436\u045F\u0446\u0432\u0431\n\n" 

Alles ist auch in der Dokumentation für 1.9 IO-Klasse:

http://ruby-doc.org/ruby-1.9/classes/IO.html

+0

Irgendeine Idee, warum mein Code nicht funktioniert? Meine einzige Vermutung ist, dass UTF-16LE-Text nicht von Terminal unterstützt wird und nicht angezeigt wird, aber ich würde denken, dass es den \ uXXX-Code zumindest ausgeben würde. – kubi

+0

Insbesondere der Abschnitt "Die externen externen und internen Kodierungen" in James Greys Artikel ist relevant für die Frage des OP. –