2010-04-24 9 views
10

Mam kawałek kodu, który wygląda tak:nazwy plików Unicode w systemie Windows w Ruby

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

Problem pojawia się, gdy mam plik o nazwie こ ん に ち は 世界 .txt w katalogu, że listy. Na Windows 7 maszynie mam wyjścia:

???????.txt 

Od googling wokół, odpowiednio przeczytaniu tego pliku w systemie Windows wydaje się być niemożliwe. Jakieś sugestie?

Odpowiedz

4

Nie masz szczęścia z czystym rubinem (1.8 lub 1.9.1), ponieważ używa wersji interfejsu API systemu Windows w wersji ANSI.

Wygląda na to, że Ruby 1.9.2 obsługuje nazwy plików w Unicode w systemie Windows. This bug report ma 1.9.2 jako cel. Według this announcement Ruby 1.9.2 ukaże się pod koniec lipca 2010.

Jeśli naprawdę trzeba to wcześniej można spróbować użyć FindFirstFileW itd bezpośrednio poprzez Win32API.new lub win32-api.

+0

FWIMC, błąd nadal nie jest naprawiony w najnowszym wydaniu 1.9.2. –

10

Miałem ten sam problem, & właśnie zorientowałem się, jak uzyskać wpisy katalogu w UTF-8 w systemie Windows. Następujące pracował dla mnie (przy użyciu 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

Właśnie to potwierdza. – seaneshbaugh

0

Moje rozwiązanie było użyć Dir.glob zamiast Dir.entries. Ale działa tylko z parametrem *. Nie działa podczas przekazywania ścieżki (c:/dir/*). Testowany w wersjach 1.9.2p290 i 1.9.3p0 na Windows 7.

Istnieje wiele innych problemów ze ścieżkami Unicode w systemie Windows. Nadal jest to open issue. Obecnie łatki są adresowane do Ruby 2.0, która jest dostępna w wersji rumored.