Liste récursive de répertoires utilisant Ruby avec des caractères chinois dans les noms de fichiers

StackOverflow https://stackoverflow.com/questions/309539

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?

Était-ce utile?

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. .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top