我无法从 Windows 7 上的 Ruby 1.9.2p290 复制名称中包含 Unicode 字符的文件。
比如我在一个目录下有两个文件:
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
最佳答案
与其说是一个真正的解决方案,不如说是一种解决方法,给出:
Dir.glob("*") # <--- Shows Unicode names correctly
Dir.glob("c:/test/*") # <--- Does not work for Unicode names
你有什么理由不能这样做吗:
Dir.chdir("c:/test/")
Dir.glob("*")
?
关于ruby - 如何在 Ruby 中复制文件名中带有 Unicode 字符的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8939287/