Я не могу копировать файлы с символами 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