編碼解碼1.py2編碼 srt和Unicode str和Unicode都是basestring的子類。嚴格意義上說,str實際上是字節串,他是unicode通過編碼後的字節組成的序列。 對utf8編碼的str‘苑’使用len()函數時,結果是3,由於utf8編碼的‘苑’=='\xe8\x8b\x91'。 而unicode是一個字符串,str是unicode這個字符串通過編碼(utf8,gbk等)後的字節組成的序列。 unicode纔是真正意義上的字符串,對字節串str使用正確的字符編碼進行解碼後得到,而且len(u'苑')==1 在py2裏,str=bytes py2編碼的最大特色是Python2將會自動的將bytes數據解碼成unicode字符串 因此py2裏面能夠將字節與字符串拼接 repr()查看存到內存裏面的是什麼 str裏面存的是bytes type()查看類型 變量=u'' 存的unicode類型 py2特色: print 'hello'+u'yuan' bytes類型加unicode類型能夠直接跨類型拼接字符串 由於會自動進行類型轉換把bytes轉換成了unicode 字節串和字符串 UnicodeError。你的代碼中包含了unicode和byte字符串,只要數據所有是ASCII的話,全部的轉換都是正確的, 一旦一個非ASCII字符偷偷進入你的程序,那麼默認的解碼將會失敗,從而形成UnicodeDecodeError的錯誤。 python2悄悄掩蓋掉了byte到unicode的轉換,讓程序在處理ASCII的時候更加簡單。而付出的代價就是處理非 ASCII的時候將會失敗。 在進行錶轉換的時候要先轉換爲unicode,而後在轉換所須要的表 utf8---》unicode---》gbk 默認ASCII碼打印,打印到控制檯須要編碼2.py3編碼 python3中對unicode 支持的最大變化就是就是將會沒有對byte字節串的自動解碼。若是直接用一個byte字節串和一個 unicode相鏈接,就會報錯,無論內容是什麼。 注:python2中有隱式處理,python3中沒有 python3中控制檯默認utf8編碼打印3.常見編碼錯誤:cmd下亂碼問題;在IDE下用2和3執行都沒問題,在cmd下3正確,2亂碼在windows終端下去執行cmd.exe去執行,但cmd.exe自己是一個軟件;當咱們pythong2 hello.py時,python2解釋器(默認ASCII編碼)去按聲明的utf8編碼文件,而文件又是utf8保存的,因此沒問題;問題是出在當print時解釋器正常執行,不會報錯,可是print的內容會傳遞給cmd.exe顯示,而在py2裏面這個內容就是utf8編碼的字節數據,而這個軟件默認的編碼解碼方式時GBK,因此cmd.exe用GBK的解碼方式去解碼utf8就會亂碼。py3傳遞給cmd.exe的是unicode數據,符合ISO統一的標準,因此沒問題。