Estoy intentando cargar un archivo de imagen en inlines Django admin y conseguir UnicodeEncodeError al intentar subir un archivo con un nombre de archivo que contiene caracteres no ASCII:UnicodeEncodeError al guardar ImageField contiene caracteres no ASCII en Django administrador
File "/usr/local/lib/python2.6/site-packages/django/db/models/fields/files.py", line 92, in save
self.name = self.storage.save(name, content)
File "/usr/local/lib/python2.6/site-packages/django/core/files/storage.py", line 47, in save
name = self.get_available_name(name)
File "/usr/local/lib/python2.6/site-packages/django/core/files/storage.py", line 73, in get_available_name
while self.exists(name):
File "/usr/local/lib/python2.6/site-packages/django/core/files/storage.py", line 196, in exists
return os.path.exists(self.path(name))
File "/usr/local/lib/python2.6/genericpath.py", line 18, in exists
st = os.stat(path)
Hay un párrafo sobre este tema en los documentos de Django: http://docs.djangoproject.com/en/dev/howto/deployment/modpython/#if-you-get-a-unicodeencodeerror - dicen que debo definir las variables de env LANG y LC_ALL, además de definirlas con os.env no funcionará. Así que les he definido en mi archivo .htaccess y estoy seguro de que están allí: aún existe
META
Variable Value
CONTENT_LENGTH '27289'
...
LANG 'en_US.UTF-8'
LC_ALL 'en_US.UTF-8'
LC_LANG 'en_US.UTF-8'
El problema. La versión de Django es 1.2.3 (última estable), sys.getfilesystemencoding() (que creo que es relevante para el problema) devuelve "ANSI_X3.4-1968".
El código de modelo/administrador no es nada especial: un modelo de ImageImage con ImageField y ArticleAdmin que contiene líneas de ArticleImage.
ACTUALIZACIÓN no podía solucionar este problema por lo que he renunciado a utilizar la configuración de Apache y comenzó la aplicación utilizando runfcgi + Nginx. Las cargas funcionan bien ahora, pero no estoy agregando esto como una solución porque la pregunta era sobre apache.
Gracias. ¿Cómo lo hago correctamente y me aseguro de que funcione? He editado mis/usr/sbin/envvars agregando estas variables y el script de python tiene # - * - codificación: utf-8 - * - – Andrey