首先我們知道utf-8是一種可變長編碼格式,表現為1個英文字母占1個字節,一個漢字占3個字節。
特點:
1.支持大部分中文。
2.是為傳輸設計的編碼。
3.是unicode字符集(涉及全球所有字符,漢字,英文,日語.......)的一種實現。
場景:有的同學在遇到with open()這個方法讀取某個txt文件時,指定了方法的參數encoding=utf8,制定了讀取方式為r,修改了txt文件也是utf8的編碼格式,運行代碼發現報錯了,信息大概就是 ****codec cannot decode byte oxd4****。
分析:報錯信息說明oxd4解碼失敗,定位解碼過程就在於我們選擇了r的讀取方式。文本模式讀取,將字節byte(utf8)轉成字符串str(unicode),導致某個編碼格式為utf8的中文字符在解碼為unicode時報錯。
解決:將r改為rb,即二進制模式讀取,不存在中間的將字節byte(utf8)轉(解碼)為字符串str(unicode)的過程。
總結:
1.uft8->unicode,使用decode()方法,方法默認使用“utf8”的編碼。(可以理解為我現在指定磁盤上某個編碼為uft8的文件去解碼為unicode,,方便后續我的python解釋器內尺存使用)
2.r,文本讀取模式,即byte->str的轉換,但是會遇到部分中文不能成功的情況,即上面的場景。
3.rb,二進制讀取,不將byte轉換成str(可以理解為字符集不切換,編碼也不切換)
4.如果公司規定保持2的代碼,那么我們可以試試使用iso-8859-1編碼格式,這是一種單字節編碼格式。