Рекурсивный список каталогов с использованием Ruby с китайскими символами в именах файлов - PullRequest
5 голосов
/ 21 ноября 2008

Я хотел бы создать список файлов в каталоге. Некоторые имена файлов содержат китайские символы.

Например: [试验] .Test.txt

Я использую следующий код:

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

При запуске скрипта создается список файлов, но китайские символы экранируются (заменяются на обратную косую черту, за которой следуют цифры). Использование приведенного выше примера имени файла даст:

«TestDir / [\ 312 \ 324 \ 321 \ 351] Test.txt» вместо «TestDir / [试验] .Test.txt».

Как можно изменить скрипт для вывода китайских символов?

Ответы [ 2 ]

4 голосов
/ 21 ноября 2008

Ruby должен знать, что вы имеете дело с юникодом в вашем коде. Установите соответствующую кодировку символов, используя KCODE, как показано ниже:

$KCODE = 'utf-8'

Я думаю, что utf-8 достаточно хорош для китайских иероглифов.

1 голос
/ 07 июня 2012

Следующий код более элегантен и не требует поиска. Он создает список файлов (но не каталогов) в любом рабочем каталоге (или любом другом каталоге).

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

И чтобы получить рекурсивное копание на один уровень, используйте:

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

Я уверен, что есть способ заставить его пройти весь путь вниз, но Dir.glob('**/*') пройдет через всю файловую систему, если я правильно помню.

...