圖解Python語言說明介紹
Python語言這同時說明IDLE的Shell支持兩種格式的中文字符串:GBK編碼的“str”對象,和UNICODE編碼的unicode對象,我連接的時候也用的是UTF-8,為什么查詢得到的文本內(nèi)容卻是UNICODE編碼(unicode對象)?這是MySQLdb庫的設(shè)置么?
在window下面用記事本編輯文件的時候,如果保存為UNICODE或UTF-8,分別會在文件的開頭加上兩個字節(jié)“\xFF\xFE”和三個字節(jié)“\xEF\xBB\xBF”。在讀取的時候就可能會遇到問題,但是不同的環(huán)境對這幾個多于字符的處理也不一樣。
打開utf-8格式的文件并讀取utf-8字符串后,解碼變成unicode對象。但是會把附加的三個字符同樣進行轉(zhuǎn)換,變成一個unicode字符,字符的數(shù)據(jù)值為“\xFF\xFE”。這個字符不能被打印。編碼的時候需要跳過這個字符。
打開unicode格式的文件后,得到的字符串正確。這時候適用utf-16解碼,能得到正確的unicdoe對象,可以直接使用。多余的那個填充字符在進行轉(zhuǎn)換時會被過濾掉。
開ansi格式的文件后,沒有填充字符,可以直接使用,結(jié)論:讀寫使用python生成的文件沒有任何問題,但是在處理由notepad生成的文本文件時,如果該文件可能是非ansi編碼,需要考慮如何處理填充字符。
剛剛接觸Python語言,我用的數(shù)據(jù)庫是mysql。在執(zhí)行插入、查找等操作時,如果運行環(huán)境使用的字符編碼和mysql不一致,就可能導(dǎo)致運行時的錯誤。當(dāng)然,和上面看到的情況一樣。
運行環(huán)境并不是關(guān)鍵因素,關(guān)鍵是查詢語句的編碼方式。如果在每次執(zhí)行查詢操作時都把查詢字符串做一次編碼轉(zhuǎn)換,轉(zhuǎn)變成mysql的默認字符編碼,一樣不會遇到問題。但是這樣寫代碼也太痛苦了吧。
相面是兩種方法的用法比較:
另外,在Python語言的shell中,不要用 u’中文’ 對屬性進行賦值。上面討論過,這樣得到的unicode字符串不正確。
【編輯推薦】