編碼解碼

編碼解碼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統一的標準,因此沒問題。
相關文章
相關標籤/搜索