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_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
Run Code Online (Sandbox Code Playgroud)
与其说是一个真正的解决方案,不如说是一种解决方法,给出:
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)
?
| 归档时间: |
|
| 查看次数: |
1233 次 |
| 最近记录: |