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_external
和default_internal
沒有幫助。
如何從Ruby複製這些文件?
更新
我找到了解決辦法。如果我使用Dir.glob
或Dir[]
而不是Dir.entry,它可以工作。文件名現在以UTF-8編碼形式返回,並且可以複製。
更新#2
我Dir.glob
的解決方案似乎是相當有限的。它只能用「*」參數的工作原理:
Dir.glob("*") # <--- Shows Unicode names correctly
Dir.glob("c:/test/*") # <--- Does not work for Unicode names
嗯,Windows 7,沒有可能重現您的問題。看看這篇文章,也許它可能會有所幫助:http://www.ruby-forum.com/topic/1593850 –
您是否嘗試在代碼文件的頂部添加'#encoding:utf-8',或者以irb -Ku的形式運行irb? – Frost
是的,我做了,但沒有幫助。 – Evgenii