Liste récursive de répertoires utilisant Ruby avec des caractères chinois dans les noms de fichiers
-
08-07-2019 - |
Question
Je souhaite générer une liste de fichiers dans un répertoire. Certains noms de fichiers contiennent des caractères chinois.
Par exemple: [??] .Test.txt
J'utilise le code suivant:
require 'find'
dirs = ["TestDir"]
for dir in dirs
Find.find(dir) do |path|
if FileTest.directory?(path)
else
p path
end
end
end
L'exécution du script produit une liste de fichiers mais les caractères chinois sont échappés (remplacés par des barres obliques inverses suivies de chiffres). L'utilisation du nom de fichier exemple ci-dessus produirait:
"TestDir / [\ 312 \ 324 \ 321 \ 351] Test.txt " au lieu de "TestDir / [??] .Test.txt".
Comment modifier le script pour afficher les caractères chinois?
La solution
Ruby a besoin de savoir que vous utilisez unicode dans votre code. Définissez le codage de caractères approprié à l'aide de KCODE, comme ci-dessous:
$KCODE = 'utf-8'
Je pense que utf-8 est suffisant pour les caractères chinois.
Autres conseils
Le code suivant est plus élégant et ne nécessite pas de recherche. Il produit une liste de fichiers (mais pas de répertoires) dans le répertoire de travail (ou le répertoire que vous avez mis).
Dir.entries(Dir.pwd).each do |x|
p x.encode('UTF-8') unless FileTest.directory?(x)
end
Et pour obtenir un niveau récursif, utilisez:
Dir.glob('*/*').each do |x|
p x.encode('UTF-8') unless FileTest.directory?(x)
end
Je suis sûr qu'il existe un moyen de le supprimer complètement mais Dir.glob ('** / *')
passera par tout le système de fichiers si je me souviens bien. .