2010-04-24 7 views
10

que tienen una porción de código que tiene este aspecto:nombres de archivo Unicode en Windows en Ruby

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

El problema viene cuando tengo un archivo llamado こ ん に ち は 世界 .txt en el directorio que lista. En una máquina Windows 7 me sale la salida:

???????.txt 

Desde alrededor de google, leer correctamente este nombre de archivo en las ventanas parece ser una tarea imposible. ¿Alguna sugerencia?

Respuesta

4

Estás de suerte con ruby ​​puro (ya sea 1.8 o 1.9.1) ya que utiliza las versiones ANSI de la API de Windows.

Parece que Ruby 1.9.2 admitirá nombres de archivo Unicode en Windows. This bug report tiene 1.9.2 como objetivo. De acuerdo con this announcement de Ruby 1.9.2 será lanzado a finales de julio de 2010.

Si realmente necesita que antes se podía tratar de utilizar FindFirstFileW etc. directamente a través de Win32API.new o win32-api.

+0

FWIMC, el error aún no se ha solucionado en el último 1.9.2 –

10

Tuve el mismo problema & que acabo de descubrir cómo obtener las entradas de un directorio en UTF-8 en Windows. Los siguientes trabajó para mí (usando Rubí 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

Acaba de confirmar que esto funciona. – seaneshbaugh

0

Mi solución fue usar Dir.glob en lugar de Dir.entries. Pero solo funciona con el * parámetro. No funciona al pasar una ruta (c:/dir/*). Probado en 1.9.2p290 y 1.9.3p0 en Windows 7.

Existen muchos otros problemas con las rutas Unicode en Windows. Todavía es un open issue. Los parches están dirigidos actualmente a Ruby 2.0, que es rumored que se lanzará en 2013.

Cuestiones relacionadas