Codificacion y nombres de archivos

Gabriel Genellina gagsl-py2 en yahoo.com.ar
Lun Jun 18 13:33:46 CEST 2007


En Mon, 18 Jun 2007 05:41:48 -0300, Oswaldo Hernández <listas en soft-com.es>  
escribió:

> He realizado una nueva instalacion con debian etch, la codificacion del  
> sistema es:
> server:/datos# locale
> LANG=es_ES.UTF-8 [...]
>
> Sobre esta instalacion he copiado los datos de otro disco que tenia  
> debian sarge con codificacion ISO8859-15.
>
> La copia la he realizado directamente, instalando el disco en el equipo,  
> haciendo un mount de la particion (ext2) y un cp -a.

Y no te dio errores al copiar? El problema con utf-8 es que no cualquier  
secuencia de bytes es válida, y si el original era ISO8859-15, eso podria  
pasar.

> El problema son los nombres de los archivos, los usuarios de ese  
> servidor guardaban muchos archivos (usando samba) con acentos, eñes,  
> etc. en los nombres de los archivos.
>
> print "Codificacion local: %s" % sys.getdefaultencoding()

Esto deberia mostrar ASCII - cualquier otra cosa trae problemas, no es el  
valor por defecto, y tuviste que haberlo modificado a proposito en site.py.
De cualquier modo, lo que te interesa en realidad no es eso sino  
sys.getfilesystemencoding() que supongo que te da utf-8

> for root, dir, files in os.walk("."):

Creo que te convendria usar walk(u"."):

>          # archivos
>          for f in files:
>                  try:
>                          fd = f.decode("iso-8859-15")
>                          if fd != f:
>                                  print "renombrar %s -> %s" & (f, fd)

Y aca:
		if isinstance(f, unicode):
			f_utf8 = f.encode("utf-8")
			f_8859 = f.encode("iso-8859-15")
			if f_utf8!=f_8859:
                                   # renombrar f_8859 a f_utf8
		elif isinstance(f, str):
			# algo que no se pudo convertir a unicode
			# porque dio errores
			# asumimos que es iso-8859-15
			f_utf8 = f.decode("iso-8859-15").encode("utf-8")
                                   # renombrar f a f_utf8

Pero no tengo forma de probarlo... La otra alternativa, si no funciona  
bien, seria dejar el os.walk("."), y eliminar la primera parte del if (lo  
que procesa unicode). Bah, o dejarlo, total nunca deberia venir un objeto  
unicode...

> El scriupt tira la excepcion :
> 'utf8' codec can't decode byte 0x80 in position 1: unexpected code byte

-- 
Gabriel Genellina

------------ próxima parte ------------
_______________________________________________
Python-es mailing list
Python-es en aditel.org
http://listas.aditel.org/listinfo/python-es


Más información sobre la lista de distribución Python-es