Frage

Ich möchte eine Liste von Dateien innerhalb eines Verzeichnisses erzeugen. Einige der Dateinamen enthalten chinesische Zeichen.

zB: [试验] .Test.txt

Ich bin mit dem folgenden Code:

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

Ausführen des Skripts erzeugt eine Liste von Dateien, aber die chinesischen Schriftzeichen entkommen sind (ersetzt mit Schrägstriche gefolgt von Ziffern). das Beispiel Dateinamen erzeugen würde oben ein:

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

Wie kann das Skript für die Ausgabe der chinesischen Schriftzeichen verändert werden?

War es hilfreich?

Lösung

Rubin muss wissen, dass Sie in Ihrem Code mit Unicode handeln. Setzen Sie geeignete Zeichenkodierung mit KCODE, wie folgt:

$KCODE = 'utf-8'

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

Andere Tipps

Der folgende Code ist eleganter und erfordert keine ‚gefunden.‘ Es gibt eine Liste von Dateien (aber nicht Verzeichnisse) in welchen das Arbeitsverzeichnis (oder was auch immer Verzeichnis, das Sie setzen in).

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

Und eine rekursive Graben eine Ebene nach unten Verwendung zu erhalten:

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

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top