Próbuję przesłać plik obrazu w ininiach admin django i uzyskać UnicodeEncodeError podczas próby przesłania pliku z nazwą pliku zawierającą znaki spoza zestawu ascii:
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)
W dokumentacji Django znajduje się akapit dotyczący tego problemu: http://docs.djangoproject.com/en/dev/howto/deployment/modpython/#if-you-get-a-unicodeencodeerror - mówią, że muszę zdefiniować zmienne env LANG i LC_ALL oraz zdefiniować je za pomocą os.env, które nie działają, więc zdefiniowałem je w moim pliku .htaccess i jestem pewien, że tam są:
META
Variable Value
CONTENT_LENGTH "27289"
...
LANG "en_US.utf-8"
LC_ALL "en_US.utf-8"
LC_LANG "en_US.utf-8"
Problem nadal istnieje. Wersja Django to 1.2.3 (najnowsza stabilna), sys.getfilesystemencoding () (co moim zdaniem jest istotne dla problemu) zwróci "ANSI_X3.4-1968".
Kod modelu / administratora nie jest niczym szczególnym: model ArticleImage z ImageField i artAdmin zawierający inlines artykułuImage.
AKTUALIZACJA Nie mogłem rozwiązać tego problemu, więc zrezygnowałem z używaniaapache setup i uruchomił aplikację przy użyciu runfcgi + nginx. Przesyłanie działa teraz dobrze, ale nie dodaję tego jako rozwiązania, ponieważ pytanie dotyczyło Apache.
Odpowiedzi:
7 dla odpowiedzi № 1Na Debianie (Lenny) wystarczy dodać następujące dwa wiersze do /etc/apache2/envvars
:
export LANG="en_GB.utf-8"
export LC_ALL="en_GB.utf-8"
... to jest dla brytyjskich serwerów internetowych.
export LANG="en_US.utf-8"
export LC_ALL="en_US.utf-8"
I ponownie uruchom Apache.
6 dla odpowiedzi nr 2
Powinieneś spróbować zdefiniować LANG i LC_ALL dla całego środowiska Apache 2.
W przypadku moich wdrożeń upewniam się także, że domyślne kodowanie systemowe Pythona jest również ustawione na UTF-8.
Dla domyślnego kodowania Pythona zwykle tworzę / edytuję sitecustomize.py, zobacz http://blog.ianbicking.org/illusive-setdefaultencoding.html
Jeśli chodzi o Apache - istnieje linia w skrypcie init/etc/init.d/apache2 (Ubuntu 8.04 LTS), który tworzy środowisko. Dodałem tam prawidłową LC_ALL, LANG. Zasadniczo powinien znajdować się w skryptach startowych serwera dla wszystkich systemów operacyjnych.
0 dla odpowiedzi № 3
twoje może to zrobić.
w linuxie:
echo $LANG i got zh_CN.utf-8
w 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 ten dokument też mi pomaga.
Myślę, że to problem z os i apache!