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_external
và default_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
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 –
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
Vâng, tôi đã làm, nhưng nó không giúp được gì. – Evgenii