2012-01-20 10 views
5

Non riesco a copiare i file che hanno caratteri Unicode nei loro nomi da Ruby 1.9.2p290, su Windows 7.Come copiare file con caratteri Unicode nei nomi di file in Ruby?

Per esempio, ho due file in una directory:

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

(il secondo nome contiene i caratteri giapponesi, se non si può vedere)

Ecco il codice:

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

Come si vede il mio file system rubino codifica i s "windows-1251" che è 8 bit e non può gestire il giapponese. L'impostazione delle codifiche default_external e default_internal in "utf-8" non aiuta.

Come posso copiare quei file da Ruby?

Aggiornamento

ho trovato una soluzione. Funziona se uso Dir.glob o Dir[] anziché Dir.entries. I nomi dei file ora vengono restituiti nella codifica utf-8 e possono essere copiati.

Aggiornamento # 2

La mia soluzione Dir.glob sembra essere piuttosto limitata. Funziona solo con il parametro "*":

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

Hmm, Windows 7, non è possibile riprodurre il problema. Dai un'occhiata a questo post, forse potrebbe essere utile in qualche modo: http://www.ruby-forum.com/topic/1593850 –

+1

Hai provato ad aggiungere '#encoding: utf-8' all'inizio del tuo file di codice, o eseguendo irb come 'irb -Ku'? – Frost

+0

Sì, l'ho fatto, ma non è stato d'aiuto. – Evgenii

risposta

0

Non tanto una vera soluzione, ma come una soluzione, data:

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

v'è alcuna ragione per cui non si può fare questo:

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

?

Problemi correlati