2010-04-24 26 views
10

Tôi có một đoạn mã mà trông như thế này:tên tập tin Unicode trên Windows trong Ruby

Dir.new(path).each do |entry| 
    puts entry 
end 

vấn đề này được đưa ra khi tôi có một file có tên こ ん に ち は 世界 .txt trong thư mục mà tôi liệt kê. Trên một máy tính Windows 7 tôi nhận được kết quả:

???????.txt 

Từ googling xung quanh, đúng cách đọc tên tập tin này trên cửa sổ có vẻ là một nhiệm vụ bất khả thi. Bất kỳ đề xuất?

Trả lời

4

Bạn đã hết may mắn với ruby ​​nguyên chất (1.8 hoặc 1.9.1) vì nó sử dụng các phiên bản ANSI của API Windows.

Có vẻ như Ruby 1.9.2 sẽ hỗ trợ tên tệp Unicode trên Windows. This bug report có mục tiêu là 1.9.2. Theo this announcement của Ruby 1.9.2 sẽ được phát hành vào cuối tháng Bảy năm 2010.

Nếu bạn thực sự cần nó trước đó bạn có thể thử sử dụng FindFirstFileW, vv trực tiếp qua Win32API.new hoặc win32-api.

+0

FWIMC, lỗi này vẫn chưa được khắc phục trong phiên bản 1.9.2 –

10

Tôi gặp vấn đề tương tự & chỉ tìm ra cách lấy các mục nhập của một thư mục trong UTF-8 trong Windows. Những điều sau đây đã hiệu quả đối với tôi (sử dụng Ruby 1.9.2p136):

opts = {} 
opts[:encoding] = "UTF-8" 
entries = Dir.entries(path, opts) 
entries.each do |entry| 
    # example 
    stat = File::stat(entry) 
    puts "Size: " + String(stat.size) 
end 
+0

mới nhất vừa được xác nhận. – seaneshbaugh

0

Giải pháp của tôi là sử dụng Dir.glob thay vì Dir.entries. Nhưng nó chỉ hoạt động với tham số *. Nó không hoạt động khi đi qua một đường dẫn (c:/dir/*). Thử nghiệm trong 1,9.2p290 và 1,9.3p0 trên Windows 7.

Có nhiều vấn đề khác với đường dẫn unicode trên Windows. Nó vẫn là open issue. Các bản vá hiện đang nhắm mục tiêu tại Ruby 2.0, là rumored sẽ được phát hành vào năm 2013.

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