2013-06-18 50 views
0

我的Django Apache Wsgi安裝程序出現了一個奇怪的問題。我最近將我的網站移到了另一臺服務器上。不幸的是,現在編碼有點搞砸了。當我運行如下命令:Django WSGI Python編碼

barcode.generate_barcode("ean", "1341341234234")

產生的圖像將顯示每個數字之間有一些特殊的字符,通常爲一些endocing問題。我想它是使用兩個字節而不是一個來表示每個字符或類似的東西。

enter image description here

如果我運行Django的./manage.py的runserver COMAND相同的設置。生成的圖像很好,沒有添加特殊字符。

所以我得出結論,這必須是我的apache2/mod_wsgi設置。但是這些版本與我之前的設置相同,即debian 6,apache2.2,mod_wsgi 3.3.2。

我想嘗試更新版本的mod_wsgi,但編譯失敗。

任何人都可以指出我正確的方向,以此編碼錯誤可能有其原因?據我瞭解,WSGI上下文以某種方式加載了整個python腳本,編碼錯誤,否則我無法解釋爲什麼硬編碼的字符串會在圖像上顯示錯誤。

在Apache的conf.d /字符集:

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 vars。

在我WSGI文件:

import sys 
reload(sys) 
sys.setdefaultencoding('utf-8') 

但似乎沒有任何幫助。我的圖片仍然生成了破碎的編碼。

+0

可能與apache配置有關? http://stackoverflow.com/questions/913869/how-to-change-the-default-encoding-to-utf-8-for-server –

+0

我已經試過這個。相應地更新我的問題 – phlebas

+1

驗證apache2/envvars是否被使用。在許多Linux發行版中,它並未被使用,您需要將這些行添加到Apache服務的init.d啓動區域中的文件中。 –

回答

0

將mod_wsgi升級到版本3.4.0將其修復。