可能會有不侷限於Python語言的內容,文中「>>>」表示結果,而不是命令行交互的提示符python
1.關於字符串編碼網絡
ASCII編碼 佔用一個字節 二進制11111111=十進制255 因此能夠編碼全部的字母和數字,好比大寫字母A的編碼是65,小寫字母z的編碼是122。可是因爲各國語言自成一脈,不免衝突,一塊兒出現會出現亂碼。編碼
Unicode編碼應運而生,編譯全部語言。一般佔用兩個字節,生僻漢字需4需4個字節,字母數字編碼補0,缺點是儲存空間變大,若都是英文字母,不划算。spa
UTF-8 可變長度編碼集兩者之長,把一個Unicode字符根據不一樣的數字大小編碼成1-6個字節,經常使用的英文字母被編碼成1個字節,漢字一般是3個字節。命令行
計算機內存統一使用Unicode編碼,存儲和傳輸則使用UTF-8編碼。code
Python的字符串類型是str,內存中以Unicode存儲,若是要在網絡上傳輸,或保存在磁盤上,就要把str變爲以字節爲單位的bytes(編碼)。blog
而從網絡或磁盤上讀取時,就要把bytes字節轉換爲str(解碼)。對應的方法分別是encode()和decode()內存
解碼的時候,若是包含沒法解碼的字節就會報錯:utf-8
1 print(b'\xe4\xb8\xad'.decode('utf-8'))
>>> 中 2 print(b'\xe4\xb8\xad\xff'.decode('utf-8'))
>>>
Traceback (most recent call last):
...
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 3: invalid start byte字符串
若是隻有一小部分無效的字節,能夠傳入errors='ignore'
忽略錯誤的字節:
1 print(b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore'))
>>> 中
當Python解釋器讀取源代碼時,爲了讓它按UTF-8編碼讀取,咱們一般在文件開頭寫上這兩行:
1 #!/usr/bin/env python3 2 # -*- coding: utf-8 -*-
第一行註釋是爲了告訴Linux/OS X系統,這是一個Python可執行程序,Windows系統會忽略這個註釋;
第二行註釋是爲了告訴Python解釋器,按照UTF-8編碼讀取源代碼,不然,你在源代碼中寫的中文輸出可能會有亂碼。
PS. 字符串的佔位符‘%s’,會把任何數據類型轉換爲字符串。也能夠用具體的數據類型的佔位符如%d表示整數,%f表示浮點數,%x表示十六進制整數 而%須要%轉義,一般‘%%’表示‘%’
2.Python的複雜數據類型之 list,tuple,dict,set