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?

Foi útil?

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.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top