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
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 –
Hai provato ad aggiungere '#encoding: utf-8' all'inizio del tuo file di codice, o eseguendo irb come 'irb -Ku'? – Frost
Sì, l'ho fatto, ma non è stato d'aiuto. – Evgenii