/ / UnicodeEncodeError Djangoの非ASCII文字を含むImageFieldを保存するとき - django、apache、unicode、django-admin

Djangoで非ASCII文字を含むImageFieldを保存するとUnicodeEncodeErrorが発生する - django、apache、unicode、django-admin

私はdjangoの管理者インラインで画像ファイルをアップロードしようとしていて、アスキー文字以外の文字を含むファイルをアップロードしようとするとUnicodeEncodeErrorを取得しようとしています。

 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の環境変数を定義し、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"を返します。

モデル/管理コードは何も特別なものではない:ImageFieldを持つArticleImageモデルと、ArticleImageインラインを含むArticleAdmin。

更新 私はこの問題を修正することができなかったので、apache setupを実行し、runfcgi + nginxを使ってアプリケーションを起動しました。アップロードはうまくいきましたが、これは解決策として追加していません。これは、質問がApacheに関するものだったからです。

回答:

回答№1の場合は7

Debian(Lenny)では次の2行を /etc/apache2/envvars

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

...それは英国のWebサーバー用です。米国向け:

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

Apacheを再起動します。


回答№2の6

Apache 2環境全体に対してLANGとLC_ALLを定義してみるべきです。

私の展開では、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を追加しました。基本的には、すべてのOSのどこかでサーバのinitスクリプトになければなりません。


回答№3の場合は0

あなたはこのようにすることができます。

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 この文書は私にも役立ちます。

私はそれがOSとApacheの問題だと思う!