国产网曝门99视频在线看_免费看片a级毛片免费看_4hu四虎永久在线观看_高清无套内精线观看456_国产欧美亚洲日韩久久福利_av在线无码观看另类重口_欧美精品一二三区较多收藏_欧美老熟妇伦视频_婷婷六月综合激情_最新国产成人野战在线观看


站長在線Python精講:Python中字符串編碼轉(zhuǎn)換encode編碼和decode解碼詳解

    時間: 瀏覽:1236次  來源:站長在線
歡迎你來到站長在線的站長學堂學習Python知識,本文學習的是《Python中字符串編碼轉(zhuǎn)換:encode編碼和decode解碼詳解》。本知識點主要內(nèi)容有:常用編碼簡介、使用encode()方法編碼、使用decode()方法解碼、Unicode和UTF-8的關(guān)系說明。

歡迎你來到站長在線的站長學堂學習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
碼字不易,打個賞唄
楊澤業(yè)感謝你的支持!

猜你喜歡

域名pythonw.cn出售

域名pythonw.cn的詳細信息:Python網(wǎng)

2022-08-06  分類:域名出售  瀏覽:1375次


站長在線Python教程:Python中類定義詳解

導讀:歡迎你來到站長在線的站長學堂學習Python知識,本文學習的是《Python中類定義詳解》。

2022-02-23  分類:Python學堂  瀏覽:1899次


站長在線Python教程:python中面向?qū)ο笙嚓P(guān)概述詳解

導讀:歡迎你來到站長在線的站長學堂學習Python知識,本文學習的是《python中面向?qū)ο笙嚓P(guān)概述詳解》。本文的主要內(nèi)容有:面向?qū)ο笫鞘裁?、面向?qū)ο笾械膶ο笫鞘裁础ython中的類是什么、面向?qū)ο缶幊痰奶攸c有哪些?

2022-02-14  分類:Python學堂  瀏覽:1617次


站長在線零基礎Python完全自學教程23:函數(shù)的返回值、作用域和匿名函數(shù)

導讀:歡迎你來到站長學堂,學習站長在線出品的在線課程《零基礎 Python完全自學教程》今天給大家分享的是第23課《函數(shù)的返回值、作用域和匿名函數(shù)》。本文是一個大課程分成了下面4節(jié)小課程:Python中函數(shù)的返回值、Python函數(shù)中的局部變量、Python函數(shù)中的全局變量、Python函數(shù)中的匿名函數(shù)等內(nèi)容。

2022-02-09  分類:Python學堂  瀏覽:1487次


站長在線Python教程:Python函數(shù)中的匿名函數(shù)詳解

歡迎你來到站長在線的站長學堂學習Python知識,本文學習的是《Python函數(shù)中的匿名函數(shù)詳解》。本文的主要內(nèi)容有:匿名函數(shù)的定義、匿名函數(shù)的表達式、匿名函數(shù)的注意點、匿名函數(shù)的優(yōu)點、匿名函數(shù)的應用舉例。

2022-02-01  分類:Python學堂  瀏覽:1603次


站長在線Python教程精講:在Python函數(shù)中的全局變量詳解

歡迎你來到站長在線的站長學堂學習Python知識,本文學習的是《Python中的全局變量詳解》。本文的主要內(nèi)容有:什么是全局變量、在函數(shù)外部定義的變量是全局變量、在函數(shù)內(nèi)部定義中添加global關(guān)鍵詞后變成全局變量。

2022-01-10  分類:Python學堂  瀏覽:1719次


站長在線Python教程精講:在Python函數(shù)中的局部變量詳解

導讀:歡迎你來到站長在線的站長學堂學習Python知識,本文學習的是《在Python函數(shù)中的局部變量詳解》。本文的主要內(nèi)容有:變量的作用域的概念、局部變量的概念、局部變量的舉例。

2022-01-06  分類:Python學堂  瀏覽:1620次


Python常用英語及用法

站長在線站長,準備系統(tǒng)的學習Python知識,但是對我來說,英語實在是太差了,當然我知道的是,不僅僅我,很多人在學習Python的時候,也是不知道這些英語單詞的意思與用法的,在這里站長在線站長就把這些英語整理出來,把英語以及中文意思、用法一起貼出來,讓大家一起來學習。

2022-01-02  分類:Python學堂  瀏覽:1834次


站長在線Python精講:Python中函數(shù)的返回值

導讀:歡迎你來到站長在線的站長學堂學習Python知識,本文學習的是《Python中函數(shù)的返回值》。本文的主要內(nèi)容有:函數(shù)的返回值的含義、函數(shù)設置返回值的作用、return語句位置與多條 return語句的總結(jié)。

2021-12-29  分類:Python學堂  瀏覽:1793次


站長在線零基礎Python完全自學教程22:在Python中函數(shù)的參數(shù)傳遞

歡迎你來到站長學堂,學習站長在線出品的在線課程《零基礎 Python完全自學教程》今天給大家分享的是第22課《在Python中函數(shù)的參數(shù)傳遞》。本文是一個大課程分成了下面5節(jié)小課程:在Python函數(shù)中理解形式參數(shù)和實際參數(shù)、在Python函數(shù)中參數(shù)傳遞的位置參數(shù)詳解、在Python函數(shù)中的關(guān)鍵字參數(shù)詳解、在Python函數(shù)中的默認參數(shù)詳解、在Python函數(shù)中的可變參數(shù)詳解。

2021-12-26  分類:Python學堂  瀏覽:1583次