1、定義與語法python
圖例:編程
**16進制轉換**代碼驗證編程語言
例: 1.八進制 >>> oct(1) '0o1' #'0o1' 0o 是八進制的顯示方式,後面的數字是多少位,就表明多少位 >>> oct(8) '0o10' >>> oct(16) #逢 8 進位 '0o20' >>> oct(32) '0o40' #8的多少倍就表明多少位 >>> oct(64) '0o100' #用的不多知道就行 2.十六進制 >>> hex(1) '0x1' >>> hex(15) #十六進制中 f 表明15,由於在16進制中,不能出現10或者10以上的2位數字 '0xf' >>> hex(16) #十六進制是逢16進位 0x是16進制的顯示方式 '0x10' >>> hex(32) '0x20' >>> hex(64) #16的多少倍就是多少位 '0x40'
2、十六進制的特徵及用途優化
1.十六進制特徵:16進制便於閱讀,如今的存儲設備都使用16進製爲單位設置的編碼
圖例spa
1.數字、二進制、十六進制之間的轉換操作系統
例: 1.用數字查找ASCII碼錶裏面對應的字符 >>> chr(100) 'd' >>> chr(120) 'x' >>> chr(123) '{' #返回對應得字符 2.數字轉換二進制 >>> bin(97) '0b1100001'
3、十六進制與二進制的轉換:七張圖瞭解16進制與二進制的轉換翻譯
圖1: 圖2: 圖3:設計
圖4: 圖5: 圖6:3d
圖7:
第十一節: 字符編碼間的轉換與python的bytes類型
1、編碼的回顧
1.編碼的總類型
* ASCII 碼,最先期的編碼,佔 1個字節的內存,只有英文。
** GB2312 佔2個字節, 支持6700多個漢字。
*** GBK ,GB2312的升級版,支持21000多個漢字。
**** shift - JIS 日本字符。
***** ks_c_5601-1987 韓國編碼。
******TIS—620 泰國編碼。
因爲每一個國家都只有本身國家的編碼,太侷限,很差在國際上流通,缺乏統一性。
*******unicode:萬國碼應運而生,2-4個字節,已收錄136690個字符,還在不斷的擴張中,主要做用有2個:1.支持普遍,兼容舊編碼。2.它包含了跟全球全部國家編碼的映射關係,缺點是:英文本來1個字節,在這裏面倒是2個字節,浪費空間,翻倍的字節帶來內存與流量翻倍,因此爲了優化便與存儲節省空間。後續出現三個unicode 的升級版分別是:
*UTF - 8 :(使用最普遍的語言) 分別用 1 ,2, 3,4 個字節表示,優先使用1個字節,沒法知足再加1個字節,英文佔 1 個字節 ,歐洲語系佔 2 個字節,東亞佔 3 個字節,其餘佔 4 個字節。
**UTF - 16 使用2-4個字節表示,優先使用2個,不然使用4個
***UTF - 32 所有用4個字節表示全部字符
總結:UTF 類編碼是unicode編碼設計的在存儲和傳輸時節省空間的編碼方案。
二、字符存儲硬盤的方法:二進制
(1).字符存儲模式:(怎麼存儲和讀取的)
首先:字符必定是用0101等二進制存儲的,可是因爲存儲時使用編碼的標準不同(UTF - 八、GBK、ASCII 碼錶....等等),因此你用什麼編碼保存的,就要用什麼編碼去讀取,不然會出現亂碼現象。
圖解:
(2).字符編碼的轉換:
雖然unicode統一了全部國家的編碼,可是 大多數國家仍是在用本身國家的編碼,中國就用 GBK 可是中國的編碼出口到外國須要怎麼的轉換呢?unicode編程語言全部的電腦系統都會默認支持,把 中國的 GBK 放到 unicode 裏面。映射出的 unicode 編程格式顯示就能夠了(unicode在這裏至關於一個翻譯)
圖解:
******字符編碼映射關係圖解:
2、 python3執行代碼流程及轉換方法
一、在python3裏面
因此在python3裏面寫的代碼去Windows上面去執行,不會亂碼
二、特殊狀況,python2裏面默認的編碼是ASCII 碼錶。
**在python2裏面,python2並不像python3自動轉unicode,而是僅以文件頭聲明的語言去解釋和保存你的編碼,若是以 UTF - 8解釋和保存,在Windows系統上就會出現亂碼,由於Windows系統默認支持的終端語言是GBK ,雖然Windows 默認支持unicode ,可是,python2 並不會自動把保存UTF - 8 格式的代碼轉成unicode 。
********亂碼確定是不行的,既然弄很差自動轉,就人肉轉了。
**由於太生手,因此搞很差python2 與 Windows 之間的轉換直接上圖解:
*****總體思路就是先把python代碼轉換成unicode給Windows閱讀,在轉回utf - 8 或GBK 存儲, **在python2裏面,不是unicode就是str 字符串類型。
##記住下圖的規則,就能懂了
*#*總結:一、在python3裏,默認編碼是 utf - 8 ,字符串默認編碼是 unicode ,若是文件頭聲明瞭其餘編碼,存起來的字符串依然會自動轉unicode 。
二、在python2裏,默認編碼是ASCII 碼 ,字符串默認是 ASCII 碼,若是文件頭聲明瞭編碼,那麼,字符串也會是什麼,不會自動轉unicode。由於unicode在python2裏面是一個單獨的類型。
3、 python3經過查看編碼映射表肯定編碼類型
一、上邊講過轉換代碼的方法,那是在知情的狀況下進行的。可是,若是不知情,不知道源代碼,也不知文件頭聲明,怎麼判斷代碼的轉換語法是正確的呢?
(1).要有unicode編碼關係映射表的exe,經過 把代碼轉換成二進制(或者16進制)在編碼關係映射表裏找到對應的編碼,把16進制轉換成二進制(二進制換算)
(2).GBK在設計時,爲了兼容ASCII 碼錶,(ASCII碼錶只有127位,因此128位省略掉)因此GBK設計時規定,若是連續兩個高字節的話,就認爲是中文,高字節就是都超過了128位。unicode 在設計時,知道GBK的規定,因此默認忽略掉了最高一位的表示單位,
4、python的bytes類型介紹
一、定義:bytes ,就是在python裏面顯示的二進制串
圖解:
二、在沒有特殊的狀況下二進制串其實就是字符串,在有圖片中的二進制串就不能叫字符串了,這就是區分bytes類型的緣由。沒法找到對應的文字,
可是也是二進制串,的顯示。這樣的二進制串叫bytes類型就不足爲奇了,因此,二進制串所有稱爲 bytes 類型
5、python3與python2的字符串區別
1.在python2裏
*str = bytes 爲何有bytes類型?
由於 :要表示圖片、視頻等二進制格式 的數據,就要用bytes 類型表示,
**以UTF - 8 寫的編碼字符串,在Windows上沒辦法顯示,如何在python2裏寫的代碼讓全球通用都能看呢?
就要以unicode 編寫代碼軟件了有兩種方法能夠實現,第一種就是在文件頭直接聲明用unicode,第二種 就是把utf- 8 轉換成unicode,轉換的語法
s = you_str.decode(UTF - 8)好比你的代碼變量名爲 s ,就要 s.decode(UTF - 8)
***在python2裏 有一個單獨的類型 :unicode類型
****語言格式須要轉換,由於存到內存的編碼,就是文件頭聲明的編碼,不會轉換其餘格式
例:
在python2裏 :以utf - 8 或 gbk . . . 寫的代碼 ,內容加載到內存裏並不會被轉成unicode 類型,依然 是utf - 8 或gbk ...
在python3裏:以utf - 8 或 gbk . . . 寫的代碼,內容加載到內存裏,會被自動轉成unicode 類型。
2. 在python3裏
str = unicode(在python3裏 ,默認支持 unicode,不是ASCII 碼錶,因此沒有unicode 這個單獨的類型)
6、總結
一、python2 與python3的轉變
由於 py 2 問題太多,知足不了太多用戶的需求,特別是在支持的語言上(ASCII 碼錶)
因此py 3 橫空出世,解決了不少問題,最重要的就是竄出時默認用unicode 格式,寫文件默認使用 utf - 8 ,這樣不管是在哪裏都能正常顯示文件
除此以外,還把str 和 bytes 進行了明確的區分,
str 就是unicode 格式的字符
bytes 類型 就是二進制串
二、處理python編碼問題的方法
最後,再提示下,python只要出現各類編碼問題,無非是一下幾種常見編碼錯誤的緣由
python解釋器的默認編碼是否有問題(py2 ASCII碼,py3 unicode)
寫的源文件的編碼,與文件頭聲明解釋的編碼是否一致例:(文件使用utf - 8 寫的,在讀取文件時文件頭卻聲明 gbk 格式)
在pycharm裏面轉換的時候(輕易不要轉),用utf - 8 寫的代碼,轉換 gbk (convert),轉換不成就會亂碼,不能回退,若是這樣的話就意味着要從新寫一份代碼
還有就是運行終端,運行終端是繼承操做系統的編碼(Windows 默認 gbk ,linx默認是utf - 8 ,這些是能夠改的,可是儘可能 要用什麼格式寫的,就以什麼格式去讀)
**小結:以上方法掌握以後,挨個排查基本上能解決問題
——————————————模塊結束線——————————————2018-11-06