recursiva do diretório listando usando Ruby com caracteres chineses em nomes de arquivos
-
08-07-2019 - |
Pergunta
Eu gostaria de gerar uma lista de arquivos dentro de um diretório. Alguns dos nomes de arquivos contêm caracteres chineses.
por exemplo: [??] .Test.txt
Eu estou usando o seguinte 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
A execução do script produz uma lista de arquivos, mas os caracteres chineses são escapados (substituído com barras invertidas seguidas por números). Usando o exemplo filename acima deve produzir:
"TestDir / [\ 312 \ 324 \ 321 \ 351] Test.txt" em vez de "TestDir / [??] .Test.txt".
Como pode o script ser alterado para a saída dos caracteres chineses?
Solução
Ruby precisa saber que você está lidando com unicode em seu código. Conjunto de caracteres apropriado codificação usando KCODE, como abaixo:
$KCODE = 'utf-8'
Eu acho utf-8 é bom o suficiente para caracteres chineses.
Outras dicas
O código a seguir é mais elegante e não necessita de 'encontrar'. Ela produz uma lista de arquivos (mas não diretórios) em qualquer que seja o diretório de trabalho é (ou qualquer diretório que você colocar no).
Dir.entries(Dir.pwd).each do |x|
p x.encode('UTF-8') unless FileTest.directory?(x)
end
E para obter uma escavação recursiva para baixo uma utilização nível:
Dir.glob('*/*').each do |x|
p x.encode('UTF-8') unless FileTest.directory?(x)
end
Estou certo que há uma maneira de obtê-lo a percorrer todo o caminho para baixo, mas Dir.glob('**/*')
vai passar por todo o sistema de arquivos, se bem me lembro.