1. 程式人生 > >08_Python編碼與解碼

08_Python編碼與解碼

文字 新的 方式 服務 nbsp 存儲器 san har hang

一、編碼的由來

因為計算機只能處理010101二進制數據,如果要處理文本,圖像,視頻等,需要我們把數據轉換成01010二進制格式才能被計算機處理

最先出現的是ASCII,用8位一個字節來表示,成為單字節碼,一個字節最多能表示256種可能,只能表示英文和符號。無法表示中文、日文、韓文等其他語言256明顯不夠。所以unicode應運而生,unicode采用32位4個字節來表示,把所有的語言都統一到一套編碼裏,解決了亂碼問題。

但新的問題出現了,如果編寫一份英文文檔,采用unicode編碼的文件比ascii編碼的文件多兩倍的空間,在存儲和傳輸上顯得浪費資源。

utf-8應運而生,UTF-8編碼把一個Unicode字符根據不同的數字大小編碼成1-6個字節,常用的英文字母被編碼成1個字節,漢字通常是3個字節,只有很生僻的字符才會被編碼成4-6個字節。如果你要傳輸的文本包含大量英文字符,用UTF-8編碼就能節省空間。

二、計算機編碼工作方式:

在計算機內存種,統一使用unicode編碼,當需要保存到硬盤或者需要傳輸的時候,采用utf-8編碼。

我們查看博客園的源代碼,就可以看出,服務器傳輸給瀏覽器的編碼格式是utf-8.

技術分享圖片

三、Python3字符編碼

在python3當中,str在內存中的編碼是unicode。如果需要存儲、傳輸,使用unicode太浪費資源,所以轉換成非unicode編碼進行存儲和傳輸。

bytes(字節):數據存儲是以bytes為單位。字節是指一小組相鄰的二進制數碼。通常是8位作為一個字節。它是構成信息的一個小單位,並作為一個整體來參加操作,比字符串小,是構成字符串的單位。

字節:一串二進制數碼作為一個整體來處理或運算,而這個整體就是字節。在計算機中,通常使用字節來表示存儲器的存儲容量,

在數據類型中,通常char占1個字節,int4個字節。

在字符編碼中:

ASCII編碼:一個英文字母(不分大小寫)占一個字節的空間,一個中文漢字占兩個字節的空間。

UTF-8編碼:一個英文字符等於一個字節,一個中文(含繁體)等於三個字節。

Unicode編碼:一個英文等於四個字節,一個中文(含繁體)等於四個字節。

unicode -> 非unicode編碼

Bytes類型和str類型數據轉換其實就是編碼與解碼的過程

utf-8,gbk都是指定編解碼時的格式

#str -> gbk
s = zhangsan
b = s.encode("gbk")
s1 = 中國
b1 
= s1.encode("gbk") print(b)#b‘zhangsan‘ print(b1)#b‘\xd6\xd0\xb9\xfa‘ gbk是兩個字節一個中文 中\xd6\xd0 國\xb9\xfa # str -> utf-8 s = zhangsan s1 = 張三 b = s.encode(utf-8) b1 = s1.encode(utf-8) print(b) #b‘zhangsan‘ print(b1) #b‘\xe5\xbc\xa0\xe4\xb8\x89‘ utf8是三個字節一個中文 張\xe5\xbc\xa0 三\xe4\xb8\x89

str 內部是unicode

使用encod轉換成非unicode編碼,如utf、gbk

08_Python編碼與解碼