Django Apache Wsgi のセットアップに奇妙な問題があります。最近、サイトを別のサーバーに移動しました。残念ながら、エンコーディングは多少混乱しています。次のようなコマンドを実行すると:
barcode.generate_barcode("ean", "1341341234234")
結果の画像では、通常、いくつかの内在的な問題のために、すべての数字の間に何らかの特殊文字が表示されます。各文字または同様のものを表すために、1バイトではなく2バイトを使用していると思います。
django ./manage.py runserverコマンドで同じセットアップを実行した場合。結果の画像は問題なく、特殊文字は追加されていません。
したがって、これは私の apache2/mod_wsgi セットアップに問題があるに違いないという結論に達しました。しかし、バージョンは私の古いセットアップ、つまり debian 6、apache2.2、mod_wsgi 3.3.2 と同じです。
新しいバージョンの mod_wsgi を試したいのですが、コンパイルに失敗します。
このエンコーディングエラーの原因がどこにあるのか、誰かが正しい方向に向けることができますか? 私の理解では、WSGI コンテキストは何らかの方法で Python スクリプト全体を間違ったエンコーディングでロードします。そうしないと、ハードコードされた文字列が画像上で間違っている理由を説明できません。
Apache conf.d/charset:
AddDefaultCharset UTF-8
私の仮想ホストではさらに:
AddDefaultCharset UTF-8
apache2/envvars:
export LANG='en_US.UTF-8'
export LC_ALL='en_US.UTF-8'
Envvars は、Apache ランレベル スクリプトで使用されます。
if [ -z "$APACHE_ENVVARS" ] ; then
APACHE_ENVVARS=$APACHE_CONFDIR/envvars
fi
また、ランレベル スクリプトで env 変数をハードコーディングして上書きしようとしました。
私のwsgiファイルで:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
しかし、何も役に立たないようです。私の画像はまだ壊れたエンコーディングで生成されています。