0

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')

しかし、何も役に立たないようです。私の画像はまだ壊れたエンコーディングで生成されています。

4

2 に答える 2