站長在線Python精講:Python中字符串編碼轉(zhuǎn)換encode編碼和decode解碼詳解
歡迎你來到站長在線的站長學堂學習Python知識,本文學習的是《Python中字符串編碼轉(zhuǎn)換:encode編碼和decode解碼詳解》。本知識點主要內(nèi)容有:常用編碼簡介、使用encode()方法編碼、使用decode()方法解碼、Unicode和UTF-8的關(guān)系說明。
永久美國免備案虛擬主機1元1天,15元1月,100元1年,1000元永久
站長在線旗下答案網(wǎng)站,全站所有題目,免費查看答案和答案解析
歡迎你來到站長在線的站長學堂學習python知識,本文學習的是《Python中字符串編碼轉(zhuǎn)換:encode編碼和decode解碼詳解》。本知識點主要內(nèi)容有:常用編碼簡介、使用encode()方法編碼、使用decode()方法解碼、Unicode和UTF-8的關(guān)系說明。
我們在《Python中的基本數(shù)據(jù)類型》中,學習過:字符串就是連續(xù)的字符序列,可以是計算機能夠表示的一切字符的集合。字符串屬于不可變序列,通常用單引號(' ')、雙引號(" ")或者三引號(''' '''或""" """)括起來。還提到了字符串常用的轉(zhuǎn)義字符。今天主要來講解一下字符串編碼轉(zhuǎn)換。
1、常用編碼簡介
1.1、ASCII,即美國標準信息交換碼,1967年制定,主要用于美國和西歐,它僅對10個數(shù)字、26個大寫英文字母、26個小寫英文字母,以及一些其他符號進行了編碼。ASCII碼最多只能表示256個符號,每個字符占一個字節(jié)(bytes)。
1.2、GB2312,國家簡體中文字符集,1980年制定,兼容ASCII。每個中文字符占兩個字節(jié)。
1.3、Unicode,國際標準組織統(tǒng)一標準字符集,1991年制定。Unicode包含了跟全球所有國家編碼的映射關(guān)系。每個字符占兩個字節(jié)。
1.4、UTF-8,國際通用編碼,制定于1992年,對全世界所有國家用到的字符都進行了編碼。UTF-8采用一個字節(jié)表示英文字符,用三個字節(jié)表示中文。在Python3.x中默認的編碼就是UTF-8編碼,這就有效的解決了中文亂碼的問題。
1.5、GBK,為GB2312的擴展字符集,兼容GB2312,支持繁體字,1995年制定。每個中文字符占兩個字節(jié)。
在Python中,有兩種常用的字符串類型,分別為str和bytes。其中,str表示Unicode字符(ASCII或者其他);bytes表示二進制數(shù)據(jù)(包括編碼的文本)。這兩種類型的字符串不能拼接在一起使用。通常情況下,str在內(nèi)存中以Unicode表示,一個字符對應若干個字節(jié)。但是如果在網(wǎng)絡上傳輸,或者保存到磁盤上,就需要把str轉(zhuǎn)換為字節(jié)類型,即bytes類型。
bytes類型的數(shù)據(jù)是帶有b前綴的字符串(用單引號或雙引號表示),例如,b'\xd2\xb0'和b'qq'都是bytes類型的數(shù)據(jù)。
str和bytes之間可以通過encode()和decode()方法進行轉(zhuǎn)換,這兩個方法是互為逆過程。下面分別進行介紹。
2、使用encode()方法編碼
encode()方法為str對象的方法,用于將字符串轉(zhuǎn)換為二進制數(shù)據(jù)(即bytes),也稱為“編碼”,其語法格式如下:
str.encode([encoding="utf-8"][,errors="strict"])
參數(shù)說明如下:
str:表示要進行轉(zhuǎn)換的字符串。
encoding="utf-8":可選參數(shù),用于指定進行轉(zhuǎn)碼時采用的字符編碼,默認為UTF-8,如果想使用簡體中文,也可以設置為gb2312。當只有這一個參數(shù)時,也可以省略前面的“encoding=”,直接寫編碼。
errors="strict":可選參數(shù),用于指定錯誤處理方式,其可選擇值可以是strict(遇到非法字符就拋出異常)、ignore(忽略非法字符)、replace(用“?”替換非法字符)或xmlcharrefreplace(使用XML的字符引用)等,默認值為strict。
說明
在使用encode()方法時,不會修改原字符串,如果需要修改原字符串,需要對其進行重新賦值。
例如,定義一個名稱為a的字符串,內(nèi)容為“星星之火可以燎原”,然后使用encode()方法將其采用GBK編碼轉(zhuǎn)換為二進制數(shù),并輸出原字符串和轉(zhuǎn)換后的內(nèi)容,代碼如下:
a = '星星之火可以燎原'
b = a.encode('gbk') # 將gbk編碼轉(zhuǎn)換為二進制數(shù)據(jù),不處理異常
print('原字符串:',a) # 輸出原字符串
print('轉(zhuǎn)換后:',b) # 輸出轉(zhuǎn)換后的二進制數(shù)據(jù)
上面的代碼執(zhí)行后,將顯示以下內(nèi)容。
原字符串: 星星之火可以燎原
轉(zhuǎn)換后: b'\xd0\xc7\xd0\xc7\xd6\xae\xbb\xf0\xbf\xc9\xd2\xd4\xc1\xc7\xd4\xad'
>>>
如果采用UTF-8編碼,轉(zhuǎn)換后的二進制數(shù)據(jù)為:
a = '星星之火可以燎原'
b = a.encode('utf-8') # 將utf-8編碼轉(zhuǎn)換為二進制數(shù)據(jù),不處理異常
print('原字符串:',a) # 輸出原字符串
print('轉(zhuǎn)換后:',b) # 輸出轉(zhuǎn)換后的二進制數(shù)據(jù)
原字符串: 星星之火可以燎原
轉(zhuǎn)換后: b'\xe6\x98\x9f\xe6\x98\x9f\xe4\xb9\x8b\xe7\x81\xab\xe5\x8f\xaf\xe4\xbb\xa5\xe7\x87\x8e\xe5\x8e\x9f'
>>>
3、使用decode()方法解碼
decode()方法為bytes對象的方法,用于將二進制數(shù)據(jù)轉(zhuǎn)換為字符串,即將使用encode()方法轉(zhuǎn)換的結(jié)果再轉(zhuǎn)換為字符串,也稱為“解碼”。
其語法格式如下:
bytes.decode([encoding="utf-8"][,errors="strict"])
參數(shù)說明如下:
bytes:表示要進行轉(zhuǎn)換的二進制數(shù)據(jù),通常是encode()方法轉(zhuǎn)換的結(jié)果。
encoding="utf-8":可選參數(shù),用于指定進行解碼時采用的字符編碼,默認為UTF-8,如果想使用簡體中文,也可以設置為gb2312。當只有這一個參數(shù)時,也可以省略前面的“encoding=”,直接寫編碼。
errors="strict":可選參數(shù),用于指定錯誤處理方式,其可選擇值可以是strict(遇到非法字符就拋出異常)、ignore(忽略非法字符)、replace(用“?”替換非法字符)或xmlcharrefreplace(使用XML的字符引用)等,默認值為strict。
站長在線提醒您:在使用decode()方法時,不會修改原字符串,如果需要修改原字符串,需要對其進行重新賦值。
例如,將上面示例中編碼后得到二進制數(shù)據(jù)(保存在變量b中)進行解碼,可以使用下面的代碼:
a = b'\xd0\xc7\xd0\xc7\xd6\xae\xbb\xf0\xbf\xc9\xd2\xd4\xc1\xc7\xd4\xad'
print('解碼后:',a.decode("gbk")) # 對進行制數(shù)據(jù)進行解碼
上面的代碼執(zhí)行后,將顯示以下內(nèi)容:
解碼后: 星星之火可以燎原
>>>
同樣的,我們選擇utf-8的字符串也是可以的
a = b'\xe6\x98\x9f\xe6\x98\x9f\xe4\xb9\x8b\xe7\x81\xab\xe5\x8f\xaf\xe4\xbb\xa5\xe7\x87\x8e\xe5\x8e\x9f'
print('解碼后:',a.decode("utf-8")) # 對進行制數(shù)據(jù)進行解碼
上面的代碼執(zhí)行后,將顯示以下內(nèi)容:
解碼后: 星星之火可以燎原
>>>
站長在線提醒您:在設置解碼采用的字符編碼時,需要與編碼時采用的字符編碼一致。
本文相關(guān)知識擴展閱讀:
4、Unicode和UTF-8的關(guān)系說明
Unicode直接支持全球所有語言,包含了跟全球所有國家編碼的映射關(guān)系。
Unicode解決了字符和二進制的對應關(guān)系,但是使用unicode的每一個字符,都占用了兩個字節(jié),太浪費空間。如unicode表示“Python”需要12個字節(jié)才能表示,比原來ASCII表示增加了1倍。
由于計算機的內(nèi)存比較大,并且字符串在內(nèi)容中表示時也不會特別大,所以內(nèi)容可以使用unicode來處理,但是存儲和網(wǎng)絡傳輸時一般數(shù)據(jù)都會非常多,那就不能這樣傳輸了。
為了解決存儲和網(wǎng)絡傳輸?shù)膯栴},出現(xiàn)了Unicode Transformation format,學術(shù)名UTF,即:對unicode中的進行格式轉(zhuǎn)換,以便于在存儲和網(wǎng)絡傳輸時可以節(jié)省空間!
UTF-8: 使用1、2、3、4個字節(jié)表示所有字符;優(yōu)先使用1個字符、無法滿足則使增加一個字節(jié),最多4個字節(jié)。英文占1個字節(jié)、歐洲語系占2個、東亞語系占3個,其它及特殊字符占4個。
UTF-16: 使用2、4個字節(jié)表示所有字符;優(yōu)先使用2個字節(jié),否則使用4個字節(jié)表示。
UTF-32: 使用4個字節(jié)表示所有字符。
總結(jié):UTF 是為unicode編碼 設計 的一種在存儲和傳輸時節(jié)省空間的編碼方案。
到此為止,本文學習的是《Python中字符串編碼轉(zhuǎn)換詳解》。本知識點主要內(nèi)容有:常用編碼簡介、使用encode()方法編碼、使用decode()方法解碼、Unicode和UTF-8的關(guān)系說明。就講解完畢了,有問題的可以給我留言哦!
關(guān)注【站長在線】,讓新手小白系統(tǒng)的零基礎學習Python,感謝你對我們的關(guān)注,點贊,轉(zhuǎn)發(fā),評論哦!
本文地址:http://003188.cn/pythonzifuchuanbianmazhuanhuan.html
阿里云虛擬主機1G空間,120元一年
香港、美國虛擬主機100元一年,1000元永久
騰訊云雙十一0.4折起,2核8G5M三年僅700元,2核4G8M三年僅198元
猜你喜歡