>[info]在計算機中,經常遇到編碼問題,本節主要梳理下ascii,unicode,utf8,gbk 這幾種編碼之間的關系。
>
## ASCII
計算機中,所有數據都以0和1來表示。在一開始的時候,要表示的內容比較少,人們使用了ascii編碼的方式來編碼。
ASCII(American Standard Code for Information Interchange,美國標準信息交換代碼)是基于拉丁字母的一套電腦編碼系統,主要用于顯示現代英語和其他西歐語言,**`其最多只能用 8 位來表示`**(一個字節),即:2\**8 -1 = 255,所以,ASCII碼最多只能表示 255 個符號。
1 1 1 1 1 1 1 1 =2\**0+2\**1+2\**2+2\**3+2\**4+2\**5+2\**6+2\**7 = 2\**8-1=255
<br>
## Unicode,UTF-8,GBK
隨著計算機的發展,顯然ASCII碼無法將世界上的各種文字和符號全部表示,所以,就需要新出一種可以代表所有字符和符號的編碼,即:Unicode
**Unicode**(統一碼、萬國碼、單一碼)是一種在計算機上使用的字符編碼。Unicode 是為了解決傳統的字符編碼方案的局限而產生的,它為每種語言中的每個字符設定了統一并且唯一的二進制編碼,以滿足跨語言、跨平臺進行文本轉換、處理的要求。Unicode規定所有字符和符號**`最少使用2字節`**(16位)來表示,即2**16-1=65535
**UTF-8**,`是對Unicode編碼的壓縮和優化`,他不再使用最少使用2個字節,而是將所有的字符和符號進行分類:ascii碼中的內容用`1個字節`保存、歐洲的字符用`2個字節`保存,東亞的字符用`3個字節`保存...
**GBK**,也是`基于Unicode編碼的進一步優化`,GBK的文字編碼是用雙字節來表示的,即不論中、英文字符均使用`雙字節`來表示
## python 中的編碼使用規則
1. `在python2默認編碼是ASCII`, `python3里默認是utf-8`
2. unicode 分為 utf-32(占4個字節),utf-16(占兩個字節),utf-8(占1-4個字節), so utf-8就是unicode
3. 在py3中encode,在`轉碼的同時還會把string 變成bytes類型`,decode在`解碼的同時還會把bytes變回string`

由上圖分析可得:
**GBK轉UTF-8的流程**
1. 首先需要通過解碼【decode】轉換回Unicode編碼
2. 然后通過編碼【encode】轉換成UTF-8編碼
**UTF轉GBK的流程**
1. 首先需要解碼【decode】轉換會Unicode編碼
2. 然后通過編碼【encode】轉換為GBK編碼
## 建議
所有的地方,建議統一使用utf-8編碼。包括py編譯,ide的設置,文件的讀寫等。
<hr style="margin-top:100px">
:-: 
***微信掃一掃,關注“python測試開發圈”,了解更多測試教程!***
- 前言
- chapter01_開發環境
- chapter02_字符串的使用
- chapter03_列表的使用
- chapter04_字典的使用
- chapter05_數字的使用
- chapter06_元組的使用
- chapter07_集合的使用
- chapter08_輸入輸出
- chapter09_控制流程
- chapter10_實例練習_登錄1
- chapter11_python函數入門
- chapter12_python中的類
- chapter13_輕松玩轉python中的模塊管理
- chapter14_掌握學習新模塊的技巧
- chapter15_通過os模塊與操作系統交互
- chapter16_子進程相關模塊(subprocess)
- chapter17_時間相關模塊(time & datetime)
- chapter18_序列化模塊(json)
- chapter19_加密模塊(hashlib)
- chapter20_文件的讀與寫
- chapter21_階段考核2_登錄
- chapter22_小小算法挑戰(排序&二分法)
- chapter23_用多線程來搞事!
- chapter24_HTTP接口請求(requests)
- chapter25_接口測試框架(pytest)
- chapter26_階段考核3_HTTP接口測試
- chapter27_HTML解析(pyquery)
- chapter28_階段考核4_爬蟲下載網易汽車
- chapter29_python中的那些編碼坑
- chapter30_MySQL數據庫操作
- chapter31 高級特性_迭代器與生成器
- chapter32 高級特性_裝飾器
- chapter33 高級特性_列表處理