Как скопировать файлы с символами Unicode в имена файлов в Ruby? - PullRequest
5 голосов
/ 20 января 2012

Я не могу копировать файлы с символами Unicode в именах из Ruby 1.9.2p290 в Windows 7.

Например, у меня есть два файла в директории:

file
ハリー・ポッターと秘密の部屋

(второе имя содержит японские символы, если вы его не видите)

Вот код:

> entries = Dir.entries(path) - %w{ . .. }
> entries[0]
=> "file"
> entries[1]
=> "???????????????" # <--- what?

> File.file? entries[0]
=> true
> File.file? entries[1]
=> false   # <---  !!! Ruby can not see it and will not copy

> entries[1].encoding.name
=> "Windows-1251"
> Encoding.find('filesystem').name
=> "Windows-1251"

Как вы видите, кодировка моей файловой системы Ruby - "windows-1251", которая является 8-битной и не может обрабатывать японский язык. Установка кодировок default_external и default_internal в 'utf-8' не помогает.

Как я могу скопировать эти файлы из Ruby?

Обновление

Я нашел решение. Это работает, если я использую Dir.glob или Dir[] вместо Dir.entries. Имена файлов теперь возвращаются в кодировке utf-8 и могут быть скопированы.

Обновление № 2

Мое Dir.glob решение выглядит весьма ограниченным. Работает только с параметром "*":

Dir.glob("*") # <--- Shows Unicode names correctly
Dir.glob("c:/test/*") # <--- Does not work for Unicode names

1 Ответ

0 голосов
/ 05 июня 2012

Не столько реальное решение, сколько обходной путь:

Dir.glob("*") # <--- Shows Unicode names correctly
Dir.glob("c:/test/*") # <--- Does not work for Unicode names

есть ли причина, по которой вы не можете сделать это:

Dir.chdir("c:/test/")
Dir.glob("*")

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...