2008-11-21 19 views
5

Me gustaría generar una lista de archivos dentro de un directorio. Algunos de los nombres de archivo contienen caracteres chinos.Listado recursivo de directorios usando Ruby con caracteres chinos en los nombres de archivo

por ejemplo: [试验] .Test.txt

estoy usando el siguiente código:

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

Ejecución de la secuencia de comandos genera una lista de archivos, pero los caracteres chinos están escapado (reemplazado con barras invertidas seguidas por números). El uso del nombre de archivo de ejemplo anterior produciría:

"TestDir/[\ 312 \ 324 \ 321 \ 351] Test.txt" en lugar de "TestDir/[试验] .Test.txt".

¿Cómo se puede modificar la secuencia de comandos para generar los caracteres chinos?

Respuesta

4

Ruby necesita saber que está tratando con unicode en su código. Establezca la codificación de caracteres adecuada con KCODE, como se muestra a continuación:

$KCODE = 'utf-8' 

Creo que utf-8 es lo suficientemente bueno para los caracteres chinos.

1

El siguiente código es más elegante y no requiere 'buscar'. Produce una lista de archivos (pero no directorios) en el directorio de trabajo que sea (o en cualquier directorio que coloque).

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

Y para obtener una excavación recursiva abajo un nivel de uso:

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

Estoy seguro de que es una manera de conseguir que ir todo el camino hacia abajo, pero Dir.glob('**/*') pasará a través de todo el archivo sistema si recuerdo bien.

Cuestiones relacionadas