Рекурсивный список каталогов с использованием Ruby с китайскими символами в именах файлов
-
08-07-2019 - |
Вопрос
Я хотел бы сгенерировать список файлов в каталоге.Некоторые имена файлов содержат китайские иероглифы.
например:[试验].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('**/*')
пройдусь по всей файловой системе, если я правильно помню.