Я намагаюся завантажити файл зображення в django admin введення і отримати 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 є документи: 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"
Проблема все ще існує. Версія Django - це 1.2.3 (останній стабільний), sys.getfilesystemencoding () (який, я вважаю, має відношення до проблеми) повертає "ANSI_X3.4-1968".
Код моделі / адміністратора не є особливою особливістю: модель ArticleImage з ImageField, а також ArticleAdmin, що містить вбудовані статті.
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 є рядка/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!