對Openstack進行二次開發的時候,遇到很多中文編碼的問題。Openstack與數據庫的映射使用的是 SQLAlchemg,中文在web頁面中顯示沒有太大問題,但是在數據庫中存放的中文數據全是亂碼。 一.最開始以爲是Python的原因,因爲Python默認的字符編碼是ascii,是不支持中文的。因此使用以下方法對python系統的默認編碼進行了修改:>>>import sys>>>sys.getdefaultencoding()獲取當前系統的默認編碼, 可能會報AttributeError: 'module' object has no attribute 'setdefaultencoding'的錯誤,執行:>>>reload(sys)再執行以上命令就可以順利通過。在python的安裝目錄下$python_home/site-packages文件夾下新建一個sitecustomize.py.內容爲:
-
# encoding=utf8
-
import sys
-
-
reload(sys)
-
sys.setdefaultencoding('utf8')
重啓Python解釋器後重新執行sys.getdefaultencoding(),即可發現編碼已經設置爲UTF-8。
二.完成以上設置後,並沒有解決我所遇到的問題,於是繼續研究Openstack nova中的db模塊,並在Google中尋找答案。之後將目光放在了SQLAlchemg上,幸運的找到了這篇文章http://www.cnblogs.com/firefish/archive/2008/11/15/sqlalchemy.html
其中提到用'.decode('gbk').encode('utf8')對中文內容進行編碼。這個方法之前已經試過,並不管用。於是繼續往後面看,文章中又提到SQLAlchemg支持在數據庫url中指定connection的編碼格式,指定方式如下:
'mysql://uid:pwd@localhost/mydb?charset=utf8' 。
於是找到Openstack nova的配置文件/etc/nova/nova.conf 其中有一行配置爲sql_connection,果斷在url後加上‘?charset=utf8',重啓nova所有相關服務,問題得到解決。