/ / UnicodeEncodeError при запазване на ImageField, съдържащ не-ASCII символи в Django admin - django, apache, unicode, django-admin

UnicodeEncodeError при запазване на ImageField, съдържащ не-ASCII символи в Django admin - django, apache, unicode, django-admin

Опитвам се да кача файл с изображения в администратора на django и да получавам UnicodeEncodeError, когато се опитвам да кача файл с име на файл, съдържащ не-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)

Има един параграф относно този въпрос в Django docs: http://docs.djangoproject.com/en/dev/howto/deployment/modpython/#if-you-get-a-unicodeencodeerror - те казват, че трябва да дефинирам LANG и LC_ALL env променливи, плюс дефинирането им с помощта на os.env няма да работи.Така че аз ги дефинирах в моя .htaccess файл и съм сигурен, че са там:

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

Проблемът все още съществува. Джанго е 1.2.3 (най-новата стабилна), sys.getfilesystemencoding () (която според мен е свързана с проблема) връща "ANSI_X3.4-1968".

Моделът / администраторският код не е нищо специално: моделът ArticleImage с ImageField и членAdmin, съдържащи articleImage inlines.

UPDATE Не мога да реша този въпрос, така че съм се отказал да използвамнастройката на apache и стартира приложението с runfcgi + nginx. Качванията работят добре, но не добавям това като решение, защото въпросът е за apache.

Отговори:

7 за отговор № 1

На Debian (Lenny) просто добавяте следните два реда /etc/apache2/envvars:

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

... това е за британските уеб сървъри За САЩ:

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

И рестартирайте Apache.


6 за отговор № 2

Трябва да опитате да дефинирате LANG и LC_ALL за цялата Apache 2 среда.

За моите инсталации също така се уверявам, че кодирането на системата по подразбиране на Python е зададено и на utf-8.

За кодирането по подразбиране на Python обикновено създавам / редактирам sitecustomize.py, вижте http://blog.ianbicking.org/illusive-setdefaultencoding.html

Що се отнася до Apache - има ред в init script/etc/init.d/apache2 (Ubuntu 8.04 LTS), който създава средата. Добавих правилния LC_ALL, LANG там. По принцип трябва да бъде скриптовете на сървъра init някъде за всички операционни системи.


0 за отговор № 3

Вашият може да направи така.

в Linux:

echo $LANG   i got zh_CN.utf-8

в 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 този документ е да ми помогне.

Мисля, че това е OS и Apache проблем!