Con un nombre de archivo que parece:Python abierta() Unicode comportamiento de nombre de archivo diferentes sistemas operativos a través de
filename = u"/direc/tories/español.jpg"
Y usando abierta() como:
fp = open(filename, "rb")
Esto abrirá correctamente el archivo en OSX (10.7), pero en Ubuntu 11.04 la función open() intentará abrir u"espa\xf1ol.jpg"
, y esto fallará con un IOError.
A través del proceso de intentar solucionar esto, he comprobado sys.getfilesystemencoding()
en ambos sistemas, ambos están configurados en utf-8 (aunque Ubuntu informa en mayúsculas, es decir, UTF-8, no estoy seguro si eso es relevante). También configuré # -*- coding: utf-8 -*-
en el archivo python, pero estoy seguro de que esto solo afecta a la codificación dentro del archivo, no a las funciones externas ni a la forma en que python maneja los recursos del sistema. El archivo existe en ambos sistemas con la eñe correctamente visualizada.
La pregunta final es: ¿Cómo abro el archivo español.jpg
en el sistema Ubuntu?
Editar: La cadena español.jpg
en realidad proviene de una base de datos a través de ORM de Django (ImageFileField), pero por el momento estoy tratando con él y ver la diferencia en el comportamiento tengo una sola cadena Unicode que es un absoluto ruta al archivo.
Por lo que vale, '" \ xf1 "' es la representación ISO-8859-1 de '" ñ "'. –
FYI, toqué un archivo llamado 'español.jpg' y lo abrí a su manera y funcionó correctamente en mi Arch Linux. ¿Podría pegar la salida 'locale' de su Ubuntu? –
'locale' da' en_US.UTF-8' para un número de parámetros que incluyen 'LANG'. – mrmagooey