Pregunta

Me gustaría generar una lista de archivos dentro de un directorio. Algunos de los nombres de archivo contienen caracteres chinos.

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

La ejecución de la secuencia de comandos genera una lista de archivos, pero los caracteres chinos se escapan (se reemplazan con barras invertidas seguidas de números). Usar el 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 alterar el script para generar los caracteres chinos?

¿Fue útil?

Solución

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

$KCODE = 'utf-8'

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

Otros consejos

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 (o en el 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 en un nivel, use:

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

Estoy seguro de que hay una manera de hacer que baje, pero Dir.glob ('** / *') recorrerá todo el sistema de archivos si no recuerdo mal .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top