2012-01-20 64 views
5

我不能複製在Windows上有在其名稱中的Unicode字符由紅寶石1.9.2p290文件,7如何在Ruby文件名中複製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文件系統編碼我這是8位的「windows-1251」,無法處理日文。對'utf-8'的編碼設置default_externaldefault_internal沒有幫助。

如何從Ruby複製這些文件?

更新

我找到了解決辦法。如果我使用Dir.globDir[]而不是Dir.entry,它可以工作。文件名現在以UTF-8編碼形式返回,並且可以複製。

更新#2

Dir.glob的解決方案似乎是相當有限的。它只能用「*」參數的工作原理:

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

嗯,Windows 7,沒有可能重現您的問題。看看這篇文章,也許它可能會有所幫助:http://www.ruby-forum.com/topic/1593850 –

+1

您是否嘗試在代碼文件的頂部添加'#encoding:utf-8',或者以irb -Ku的形式運行irb? – Frost

+0

是的,我做了,但沒有幫助。 – Evgenii

回答

0

與其說是真正的解決方案,但作爲一種解決方法,給出:

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

沒有任何理由,你不能做到這一點:

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

相關問題