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