apache設置locale問題

把django項目部署到apache的時候,遇到一個locale設置問題。解決過程還挺艱難的。記錄一下。前端

前端將一個路徑傳給後臺,後臺會調用os模塊獲取該路徑的一些信息。若是路徑包含中文,調用os.path.*簇類方法,會拋出異常apache

ascii codec can't encode characters in position 13-16:ordinal not in range(128)

項目在django自帶的server中運行不會出現此異常,部署到apache則有。兩環境下,後臺都能將路徑信息正確輸出。django

思惟定式,一直從中文亂碼的角度去解決該問題,繞了很多路。正確的緣由是由於os模塊會根據locale設置從新編碼路徑信息,默認的爲ascii編碼。bash

在django自帶的server和直接在終端bash調用編碼

locale.getlocale()

獲得的輸出都是code

('zh_CN', 'utf'),

惟有在apache中跑的時候輸出了server

(None, None)。

不能在源碼中調用ci

locale.setlocale(LC_ALL, 'zh_CN.UTF-8'),

從新獲取後仍爲None。正確的設置方法是修改apache的運行環境。部署

修改/etc/sysconfig/httpd,添加get

HTTPD_LANG=zh_CN.UTF-8

OK,重啓httpd服務能夠正常運行了

相關文章
相關標籤/搜索