我的Django Apache Wsgi安裝程序出現了一個奇怪的問題。我最近將我的網站移到了另一臺服務器上。不幸的是,現在編碼有點搞砸了。當我運行如下命令:Django WSGI Python編碼
barcode.generate_barcode("ean", "1341341234234")
產生的圖像將顯示每個數字之間有一些特殊的字符,通常爲一些endocing問題。我想它是使用兩個字節而不是一個來表示每個字符或類似的東西。
如果我運行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')
但似乎沒有任何幫助。我的圖片仍然生成了破碎的編碼。
可能與apache配置有關? http://stackoverflow.com/questions/913869/how-to-change-the-default-encoding-to-utf-8-for-server –
我已經試過這個。相應地更新我的問題 – phlebas
驗證apache2/envvars是否被使用。在許多Linux發行版中,它並未被使用,您需要將這些行添加到Apache服務的init.d啓動區域中的文件中。 –