2012-01-20 23 views
5

tôi không thể sao chép các file có ký tự Unicode trong tên của họ từ Ruby 1.9.2p290, trên Windows 7.Làm thế nào để sao chép các tệp có ký tự Unicode trong tên tệp trong Ruby?

Ví dụ, tôi có hai tập tin trong một thư mục:

file 
ハリー・ポッターと秘密の部屋 

(Tên thứ hai chứa các ký tự Nhật Bản nếu bạn không thể nhìn thấy nó)

đây là mã:

> 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" 

Như bạn thấy mã hóa hệ thống tập tin của Ruby của tôi s "windows-1251" là 8 bit và không thể xử lý tiếng Nhật. Việc đặt mã hóa default_externaldefault_internal thành 'utf-8' không giúp ích gì.

Làm cách nào để sao chép các tệp đó từ Ruby?

Cập nhật

Tôi tìm thấy một giải pháp. Nó hoạt động nếu tôi sử dụng Dir.glob hoặc Dir[] thay vì Dir.entries. Tên tệp giờ đây được trả về bằng mã hóa utf-8 và có thể được sao chép.

Update # 2

giải pháp Dir.glob My dường như là khá hạn chế. Nó chỉ làm việc với "*" tham số:

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

Hmm, Windows 7, không có khả năng tái tạo sự cố của bạn. Hãy xem bài đăng này, có thể nó hữu ích bằng cách nào đó: http://www.ruby-forum.com/topic/1593850 –

+1

Bạn đã thử thêm '#encoding: utf-8' vào đầu tệp mã của mình, hoặc chạy irb như 'irb -Ku'? – Frost

+0

Vâng, tôi đã làm, nhưng nó không giúp được gì. – Evgenii

Trả lời

0

Không quá nhiều một giải pháp thực tế, nhưng như một cách giải quyết, đưa ra:

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

là có bất cứ lý do bạn không thể làm điều này:

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

?

Các vấn đề liên quan