Domanda

Vorrei generare un elenco di file all'interno di una directory. Alcuni nomi di file contengono caratteri cinesi.

ad esempio: [??] .Test.txt

Sto usando il seguente codice:

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

L'esecuzione dello script produce un elenco di file ma i caratteri cinesi sono sfuggiti (sostituiti da barre rovesciate seguite da numeri). L'uso del nome file di esempio sopra produrrebbe:

" TestDir / [\ 312 \ 324 \ 321 \ 351] Test.txt " anziché " TestDir / [??] .Test.txt " ;.

Come si può modificare lo script per generare i caratteri cinesi?

È stato utile?

Soluzione

Ruby deve sapere che hai a che fare con unicode nel tuo codice. Imposta la codifica dei caratteri appropriata usando KCODE, come di seguito:

$KCODE = 'utf-8'

Penso che utf-8 sia abbastanza buono per i caratteri cinesi.

Altri suggerimenti

Il seguente codice è più elegante e non richiede "trova". Produce un elenco di file (ma non directory) in qualunque sia la directory di lavoro (o in qualunque directory tu abbia inserito).

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

E per ottenere uno scavo ricorsivo di un livello usare:

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

Sono sicuro che c'è un modo per farlo scendere fino in fondo ma Dir.glob ('** / *') passerà attraverso l'intero file system se ricordo bene .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top