convertir nombres de archivo de latin1 a utf8

Alvaro Herrera alvherre en alvh.no-ip.org
Mie Mar 21 10:43:20 CLT 2007


Germán Poó Caamaño escribió:

> En python podría ser algo como:
> 
> #!/usr/bin/env python
> 
> import string, sys, os, os.path
> 
> def utf8(str):
>     return unicode(str, "iso-8859-1").encode("utf-8")
> 
> if __name__ == "__main__":
>     for root, dirs, files in os.walk(sys.argv[1]):
>         for name in files:
>             old_name = os.path.join(root, name)
>             new_name = os.path.join(root, utf8(name))
>             os.rename(old_name, new_name)
> 
> Tiene un pequeño defecto. Asume que todo está en latin1.  Es decir,
> renombra todo.  Pero se puede añadir algún test para determinar si la
> cadena es o no latin1.

Hmm.  Gracias Germán.  Esta solución programática me sirvió bastante,
sobre todo para darme cuenta por qué el convmv no me había servido.
Después de jugar un rato me di cuenta que el problema no es realmente
convertir Latin-1 en UTF8, sino que convertir desde "algun charset" a
UTF8, donde el charset en realidad debe ser determinado por
experimentación.  Algunos archivos tienen nombres en Latin-1, otros en
Win-1252, y otros en IBM cp850.  Así que es una ensalada que debo
adivinar, cada archivo por separado :-(  (Lo malo es que sin saber
alemán es más difícil darse cuenta si la transliteración tiene sentido o
no ... pero creo que en la mayoría de los casos la inspección simple es
suficiente)

Germán, una pregunta, ¿cómo hago para que os.walk no recorra los
subdirectorios recursivamente?


Muchas gracias a todos por las sugerencias.

-- 
Alvaro Herrera                               http://www.PlanetPostgreSQL.org/
"The ability to monopolize a planet is insignificant
next to the power of the source"


Más información sobre la lista de distribución Linux