近期,用Python處理一些中文的字符串,可是用Python讀取文件的中文字符和在代碼中輸入的中文字符,在判斷處理時,例如判斷「相等」或者「包含」,老是不能判斷,相等或者包含都不起做用。看了字符的編碼,源文件輸入的中文字符,是2個字節表示,讀入的文件,是3個字節表示。在網上找了不少資料,大多和個人問題不想關,這裏就根據本身的領悟和網上不錯的資源跟你們分享一下。python
不要把Python和Java混淆,Python是腳本語言,不會編譯生成可執行文件,而Java會編譯代碼,造成可執行的class文件,在編碼上,Java會在造成class的時候,採用Unicode直接編碼相似中文的字符串,而Python,你即便在文件的第一行聲明瞭編碼,有時我也感受不起做用,只是不會在保存時,重複提醒你在代碼中使用的特殊字符。編輯器
網上有不少decode,encode,看的我一陣頭大,之前不知爲什麼物,這裏解釋一下:字符串在Python內部的表示,都是以Unicode形式,因此在作編碼轉換時,都是以Unicode做爲中間形式;而將其餘編碼轉化爲Unicode的過程,成爲decode,將Unicode轉化成其餘編碼的過程,成爲encode。在源代碼中,你輸入的,是你編輯器默認的編碼,多是utf-8,,也多是gbk或者其餘編碼,因此寫代碼,你要明白 你的編輯器環境的編碼方式。在這裏我就是我剛裝不久Python,用的是默認的IDE,裏面沒有設置編碼,致使源碼中採用了Windows默認的編碼「gbk」(2個字節),而我讀入的文件則是utf-8表示(三個字節)。而在Python中,它不會自動將這些字符串轉成Unicode形式,採用的是什麼編碼,就是什麼編碼。因此在比較或者包含時,編輯器裏的中文是兩個字節,讀入的文件,是三個字節,編碼格式就不同,更不要談比較或者包含了。學習
知道了問題出在哪,那就好解決了。編碼
方法一: 我直接將編輯器環境在設置裏面,設置成utf-8,解決問題了。spa
方法二:對於編輯器裏寫的中文編碼和讀取的文件的編碼,都decode成Unicode形式。.net
方法三:經過Unicode形式,轉化成一種編碼格式,utf-8或者gbk(我的建議utf-8,代碼中屬於比較默認一類的).code
s1 = unicode('你好','gbk') #這裏是window是環境,輸入的要經過gbk進行Unicode s2 = unicode(input, 'utf-8') #讀入的文件爲utf-8,要使用utf-8 #或者用方法二中直接採用 decode,你們能夠本身找找,自主學習和實踐,是每一個IT人必須的
注意一下:window中文默認的是gbk,而Linux默認的通常都是utf-8,這個在編碼或者處理字符處理,或者文本處理時,要注意,出了問題可能不是代碼的問題。blog
若是想着更多瞭解Unicode,utf-8或者其餘編碼,推薦看看一個博主的博客,《字符編碼的發展歷程》,博文地址:http://blog.csdn.net/sfdev/article/details/3770706。圖片
我通常寫博客都是本身用來記住犯過的錯,寫的很少,也不會寫太多,見諒。文字太多,圖片較少,這是大部分IT人最不肯看到的,可是要作個「耐心」的IT人,以此警醒。utf-8