Listado de directorio recursivo usando Ruby con caracteres chinos en nombres de archivo
-
08-07-2019 - |
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?
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 .