python編碼問題
為什麼想講這個問題?主要是最近自己遇到這個問題,然後就是把自己看到的一起交流一下。
記得我們在讀取檔案內容的時候,老是會涉及到編碼解碼的問題,特別是有的檔案內容常用的編碼還不支援,這就令人非常的煩。下面列出一行常用的讀取檔案內容程式碼。
with open('a.txt','r',encoding='utf-8') as pp:
這裡面主要是三個引數,第一個是檔名,第二個是隻讀的方式開啟檔案,第三個是編碼解碼格式,為什麼我要說是編碼解碼格式呢?先來普及一下基本的知識。
位元組和字元;字元是人類所能識別的基礎單元,比如英文單詞‘love’,這個單詞是由四個字母組成,四個字母中每個字母都代表我們能識別的字元單元,同理中文‘你好’,你和好分別代表2個字元單元。字元大致就可以這樣簡單的理解;那麼位元組呢?我們都知道計算機中所能識別的都是二進位制位,也就是0-1串,一個位元組就代表8位二進位制位。
位元組和字元又是怎麼聯絡到一起呢?簡單的說就是怎麼把人類語言轉變成計算機能讀懂的語言,編碼這個時候就應運而生了,編碼方式的差異決定多少位元組代表一個字元,比如以前常見的ASCII就是一個位元組對應一個字元,相當於我制定了一個規則,然後你按照這個規則將文字(字元)轉換成計算機能理解的東西(位元組)。解碼呢?就是編碼的逆過程,用相應編碼的規則將計算機內的東西(位元組)轉換成人類理解的東西(文字).
編碼:字元到位元組的轉換
解碼:位元組到字元的轉換
把這兩個過程運用到檔案的讀取中更好理解。計算機讀取文字和寫入文字的方式是位元組流,讀取檔案的時候,把位元組流轉換成字元,實際上就是解碼過程,同時,將字元寫到檔案中去,實際上就是編碼過程。
有的人可能說,我怎麼記得python中讀取檔案的時候,解碼後的字元都是unicode編碼,這又是怎麼回事?我查了下別人說的優勢,有以下三點:
1.可以處理非英文內容
2.可以使用第三方庫
3.接收任何的輸入內容
相當於位元組流解碼變成unicode編碼的字元,unicode字元作為python內部處理通用字元,最後編碼變成其他字元。
順便提一句,前面的with方法中無論讀取還是寫入,都是encoding變數後面填引數,讀取對應就是解碼方式,寫入對應編碼方式,python3預設編碼方式是utf-8。
關於unicode的詳細介紹以及編碼的演變可以點選下面的連結:
ofollow,noindex">編碼演變歷史