Elenco di directory ricorsive che utilizza Ruby con caratteri cinesi nei nomi dei file
-
08-07-2019 - |
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?
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 .