2008-11-21 8 views
5

Ich möchte eine Liste von Dateien in einem Verzeichnis erstellen. Einige der Dateinamen enthalten chinesische Zeichen.Rekursive Verzeichnisliste mit Ruby mit chinesischen Zeichen in Dateinamen

zB: [试验] .Test.txt

ich den folgenden Code verwenden:

require 'find' 
dirs = ["TestDir"] 
for dir in dirs 
    Find.find(dir) do |path| 
    if FileTest.directory?(path) 
    else 
     p path 
    end 
    end 
end 

das Skript ausführen erzeugt eine Liste von Dateien, aber die chinesischen Schriftzeichen entkommen sind (mit Schrägstrichen ersetzt gefolgt durch Zahlen). Die Verwendung des obigen Beispiels Dateiname würde erzeugen:

"TestDir/[\ 312 \ 324 \ 321 \ 351] Test.txt" anstelle von "TestDir/[试验] .Test.txt".

Wie kann das Skript geändert werden, um die chinesischen Schriftzeichen auszugeben?

Antwort

4

Ruby muss wissen, dass Sie in Ihrem Code mit Unicode umgehen. Stellen Sie die entsprechende Zeichencodierung mit KCODE wie folgt ein:

$KCODE = 'utf-8' 

Ich denke, utf-8 ist gut genug für chinesische Schriftzeichen.

1

Der folgende Code ist eleganter und erfordert nicht "finden". Es erzeugt eine Liste von Dateien (aber keine Verzeichnisse) in dem Arbeitsverzeichnis (oder in dem Verzeichnis, das Sie anlegen).

Dir.entries(Dir.pwd).each do |x| 
    p x.encode('UTF-8') unless FileTest.directory?(x) 
end 

Und eine rekursive Graben bekommen eine Ebene nach unten verwenden:

Dir.glob('*/*').each do |x| 
    p x.encode('UTF-8') unless FileTest.directory?(x) 
end 

Ich bin sicher, dass es eine Möglichkeit, es zu bekommen, ist den ganzen Weg hinunter zu gehen, aber Dir.glob('**/*') wird die gesamte Datei durch System, wenn ich mich recht erinnere.