Рекурсивный список каталогов с использованием Ruby с китайскими символами в именах файлов

StackOverflow https://stackoverflow.com/questions/309539

Вопрос

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

например:[试验].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 ".

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

Это было полезно?

Решение

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

$KCODE = 'utf-8'

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

Другие советы

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

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('**/*') пройдусь по всей файловой системе, если я правильно помню.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top