如何在Ruby中复制文件名中带有Unicode字符的文件?

Evg*_*nii 5 ruby filesystems unicode utf-8

我不能在Windows 7上从Ruby 1.9.2p290复制名称中包含Unicode字符的文件.

例如,我在目录中有两个文件:

file
??????????????
Run Code Online (Sandbox Code Playgroud)

(如果你看不到,第二个名字包含日文字符)

这是代码:

> 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"
Run Code Online (Sandbox Code Playgroud)

如你所见,我的Ruby文件系统编码是"windows-1251",这是8位,无法处理日语.设置default_externaldefault_internal编码'utf-8'没有帮助.

如何从Ruby复制这些文件?

更新

我找到了解决方案.如果我使用Dir.globDir[]代替Dir.entries,它可以工作.文件名现在以utf-8编码返回,可以复制.

更新#2

我的Dir.glob解决方案似乎非常有限.它只适用于"*"参数:

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

Dar*_*tle 1

与其说是一个真正的解决方案,不如说是一种解决方法,给出:

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

有什么原因你不能这样做:

Dir.chdir("c:/test/")
Dir.glob("*")
Run Code Online (Sandbox Code Playgroud)