/ / UnicodeEncodeError beim Speichern von ImageField mit Nicht-ASCII-Zeichen in Django admin - django, apache, unicode, django-admin

UnicodeEncodeError beim Speichern von ImageField mit Nicht-ASCII-Zeichen in Django admin - django, apache, unicode, django-admin

Ich versuche, eine Image-Datei in django admin-Inlines zu laden und UnicodeEncodeError zu erhalten, wenn ich versuche, eine Datei mit einem Dateinamen hochzuladen, der nicht-ASCII-Zeichen enthält:

 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)

Es gibt einen Absatz über dieses Problem in Django-Dokumenten: http://docs.djangoproject.com/en/dev/howto/deployment/modpython/#if-you-get-a-unicodeencodeerror - Sie sagen, ich muss definieren LANG und LC_ALL env-Variablen, plus definieren sie mit os.env wird nicht funktionieren. Also ich habe sie in meiner .htaccess-Datei definiert und ich bin sicher, dass sie da sind:

META
Variable    Value
CONTENT_LENGTH  "27289"
...
LANG    "en_US.utf-8"
LC_ALL  "en_US.utf-8"
LC_LANG     "en_US.utf-8"

Das Problem besteht immer noch. Django-Version ist 1.2.3 (neueste stabile), sys.getfilesystememoding () (die ich glaube, dass für das Problem relevant ist) gibt "ANSI_X3.4-1968" zurück.

Der Modell- / Admin-Code ist nichts Besonderes: ein ArticleImage-Modell mit ImageField und ArticleAdmin mit ArticleImage-Inlines.

AKTUALISIEREN Ich konnte dieses Problem nicht beheben, so dass ich aufgegeben habeApache Setup und startete die Anwendung mit runfcgi + nginx. Uploads funktionieren jetzt gut, aber ich füge das nicht als Lösung hinzu, weil die Frage über Apache war.

Antworten:

7 für die Antwort № 1

Auf Debian (Lenny) fügen Sie einfach die folgenden zwei Zeilen hinzu /etc/apache2/envvars:

export LANG="en_GB.utf-8"
export LC_ALL="en_GB.utf-8"

... das ist für UK-Webserver. Für US:

export LANG="en_US.utf-8"
export LC_ALL="en_US.utf-8"

Und starte Apache neu.


6 für die Antwort № 2

Sie sollten versuchen, LANG und LC_ALL für die gesamte Apache 2-Umgebung zu definieren.

Für meine Bereitstellungen stelle ich außerdem sicher, dass die Python-Standardsystemcodierung ebenfalls auf utf-8 eingestellt ist.

Für die Python-Standardcodierung erstelle / bearbeite ich normalerweise sitecustomize.py, siehe http://blog.ianbicking.org/illusive-setdefaultencoding.html

Wie für Apache - es gibt Zeile in Init-Skript/etc/init.d/apache2 (Ubuntu 8.04 LTS) erstellt die Umgebung. Ich habe dort die richtige LC_ALL, LANG hinzugefügt. Grundsätzlich sollte es in den Server-Init-Skripten irgendwo für alle Betriebssysteme sein.


0 für die Antwort № 3

Du kannst das so machen.

in linux:

echo $LANG   i got zh_CN.utf-8

in Apache2 / envvars

export LANG="zh_CN.utf-8"  #keep this variable like echo $LANG.
export LC_ALL="zh_CN.utf-8" #the same.

https://docs.djangoproject.com/en/1.4/howto/deployment/modpython/#if-you-get-a-unicodeencodeerror Dieser Doc hilft mir auch.

ich denke, es ist das os und apache problem!