最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入淺析python3中的unicode和bytes問題

 更新時間:2019年07月03日 11:05:38   作者:虞大膽  
在python3中,有兩種字符串類型,默認的就是str,即unicode,也叫做文本類型。這篇文章主要介紹了python3中的unicode和bytes問題,需要的朋友可以參考下

最近寫了一些python3程序,四處能看到bytes類型,而它并不存在于python2中,這也是python3和python2顯著區(qū)別之一。

以前在寫python2代碼的時候,經(jīng)常會遇到很多編碼報錯的異常,原因在于python2對unicode的支持不是特別理想。而在python3中,所有編寫的代碼都是unicode,python解析器在運行的時候,內(nèi)部都轉(zhuǎn)換(除非你顯示定義為bytes類型)為unicode,減少了出錯的可能性。

在python3中,有兩種字符串類型,默認的就是str,即unicode,也叫做文本類型。但一個程序總是會有I/O操作(磁盤,網(wǎng)絡(luò)),即I/O二進制數(shù)據(jù),在python3中定義為bytes類型。bytes類型就是一個個字節(jié)串,包含0~256 之間的一個整數(shù)。

那么如何定義bytes類型呢,有兩種顯示的方法,比如:

#只能允許ASCII值
x=b'abc'
y=b'\xe6\x88\x91'
print (x,y)
#對unicode字符集進行特定編碼
t=bytes("我們","UTF-8")
#輸出b'\xe6\x88\x91\xe4\xbb\xac'
#一個中文字符,UTF-8編碼占用三個字節(jié)
print (t)
#返回6,對于python來說,就是字節(jié)序列的長度
print (len(t))
#返回2,代表兩個字符
print (len("我們"))

接下去說說str類型和bytes類型之間的轉(zhuǎn)換,比如從網(wǎng)絡(luò)上讀取到二進制數(shù)據(jù)后,python需要你顯示的將其轉(zhuǎn)換為str類型,也就是說 python不會隱式在str和bytes之間轉(zhuǎn)換 ,看上去麻煩了很多,但會減少你出錯的幾率,自己明確自己做要的事情。

如果要將str轉(zhuǎn)換為bytes,必須選擇一個編碼,明確二進制數(shù)據(jù)是如何編碼的,比如:

x="我"
y=x.encode("UTF-8")
z=x.encode("GBK")
#b'\xe6\x88\x91' b'\xce\xd2'
print (y,z)

如果要將bytes轉(zhuǎn)換為str,也需要一個編碼,必須說明的是,你必須知道 二進制數(shù)據(jù)的編碼是什么 ,如果選錯了,轉(zhuǎn)換為unicode的時候會錯誤,另外在python內(nèi)部,它不關(guān)心二進制數(shù)據(jù)是什么編碼的,只要是bytes類型, 它就是一串字節(jié)序列 ,比如:

x=b'\xe6\x88\x91'
print (x.decode("UTF-8"))
#會報錯
print (x.decode("GBK"))

總之一句話,“ python內(nèi)部使用unicode,外部使用bytes類型 ”,python內(nèi)建庫中,很多函數(shù)會說明需要str類型還是bytes類型(嚴格說來是bytes-like對象,比如bytes、bytearray ),在寫代碼的時候一定要看清楚,比如 hamc 庫的new方法,就要求:

hmac.new(key, msg=None, digestmod=None) key is a bytes or bytearray object giving the secret key

很多庫,尤其第三方庫(比如requests)為了兼容python2和python3,會在內(nèi)部做很多轉(zhuǎn)換工作,讓你意識不到bytes類型的存在,雖然生產(chǎn)力提高了,但對于理解python并沒有太大的好處。

如果要充分理解bytes和str的應(yīng)用,可以參考open和write兩個內(nèi)建函數(shù)。

使用文本方式打開文件,python在內(nèi)部會自動轉(zhuǎn)換為str類型,比如:

file ="t.txt"
t = open(file,mode="r").read()

而如果是二進制方式打開,如果要顯示在終端,需要轉(zhuǎn)換為str類型,比如:

file ="t.txt"
t = open(file,mode="rb").read()
print (t.decode())
print (t,type(t))

而如果是二進制方式寫入,則將bytes類型數(shù)據(jù)直接寫入,比如:

file="t.txt"
t=open(file,mode="wb")
t.write(b'\xe6\x88\x91')

在上面幾個例子中,都沒有說明使用那種編碼,如果不顯示指定,一般編碼等同于locale.getpreferedencoding() 。

總結(jié)

以上所述是小編給大家介紹的python3中的unicode和bytes問題,希望對大家有所幫助,如果大家有任何疑問請給我留言,小編會及時回復(fù)大家的。在此也非常感謝大家對腳本之家網(wǎng)站的支持!
如果你覺得本文對你有幫助,歡迎轉(zhuǎn)載,煩請注明出處,謝謝!

相關(guān)文章

  • ?cmd輸入python打開微軟應(yīng)用商店的解決方法

    ?cmd輸入python打開微軟應(yīng)用商店的解決方法

    在命令控制行中輸入python想使用Python環(huán)境,卻意外打開了微軟自帶的應(yīng)用商店,十分苦惱,下面這篇文章主要給大家介紹了關(guān)于?cmd輸入python打開微軟應(yīng)用商店的解決方法,需要的朋友可以參考下
    2024-03-03
  • Python通過psd-tools解析PSD文件

    Python通過psd-tools解析PSD文件

    這篇文章主要介紹了Python通過psd-tools解析PSD文件,文章圍繞主題展開詳細的內(nèi)容介紹,具有一定的參考價值,感興趣的小伙伴可以參考一下
    2022-06-06
  • python中將阿拉伯數(shù)字轉(zhuǎn)換成中文的實現(xiàn)代碼

    python中將阿拉伯數(shù)字轉(zhuǎn)換成中文的實現(xiàn)代碼

    用于將阿拉伯數(shù)字轉(zhuǎn)換化大寫中文。程序沒經(jīng)過任何優(yōu)化,出沒經(jīng)過詳細的測試,掛到網(wǎng)上,方便將來有需要的時候直接拿來用
    2011-05-05
  • python查找重復(fù)圖片并刪除(圖片去重)

    python查找重復(fù)圖片并刪除(圖片去重)

    這篇文章主要為大家詳細介紹了python查找重復(fù)圖片并刪除,識別不同尺寸大小一致的圖片,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2019-07-07
  • NLTK的安裝教程及安裝錯誤解決方案

    NLTK的安裝教程及安裝錯誤解決方案

    NLTK是一款用于自然語言處理的Python庫,安裝過程簡單易懂,只需要使用pip安裝即可。若安裝過程中出現(xiàn)錯誤,可以通過更新pip、安裝必要的依賴項、更換鏡像源等方式解決。
    2023-04-04
  • 使用Python測試Ping主機IP和某端口是否開放的實例

    使用Python測試Ping主機IP和某端口是否開放的實例

    今天小編就為大家分享一篇使用Python測試Ping主機IP和某端口是否開放的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-12-12
  • 詳解python?sklearn中的數(shù)據(jù)預(yù)處理方法

    詳解python?sklearn中的數(shù)據(jù)預(yù)處理方法

    本篇文章主要講解Python的sklearn庫中常用的數(shù)據(jù)預(yù)處理方法,主要介紹工具中的內(nèi)容,即該庫中的相關(guān)方法包含的常用接口和基本使用,希望對大家有所幫助
    2023-08-08
  • Python Sanic框架實現(xiàn)文件上傳功能

    Python Sanic框架實現(xiàn)文件上傳功能

    Sanic是一個Python 3.5+的異步Web框架,它的設(shè)計理念與Flask相似,但采用了更高效的異步I/O處理,在處理文件上傳時,Sanic同樣提供了方便、高效的方法,本教程將結(jié)合實際案例,詳細介紹如何在Sanic框架中實現(xiàn)文件上傳的功能,需要的朋友可以參考下
    2024-08-08
  • python 內(nèi)置模塊詳解

    python 內(nèi)置模塊詳解

    模塊是一個保存了Python代碼的文件。模塊能定義函數(shù),類和變量。模塊里也能包含可執(zhí)行的代碼,今天我們就來詳細探討下python內(nèi)置的一些常用模塊
    2019-01-01
  • Python中的Super用法示例詳解

    Python中的Super用法示例詳解

    Python中可以直接通過調(diào)用父類名調(diào)用父類方法,在多重繼承中,使用super()是一個很好的習慣,下面這篇文章主要給大家介紹了關(guān)于Python中Super用法的相關(guān)資料,文中通過示例代碼介紹的非常詳細,需要的朋友可以參考下
    2022-04-04

最新評論

巩留县| 柳州市| 景德镇市| 独山县| 新干县| 囊谦县| 丹江口市| 阳西县| 集安市| 农安县| 德安县| 湾仔区| 普兰店市| 马龙县| 山阴县| 襄城县| 石河子市| 尼勒克县| 灵山县| 留坝县| 大同市| 大港区| 开原市| 开鲁县| 青神县| 定陶县| 铜山县| 页游| 利津县| 霍邱县| 宜君县| 蒲城县| 安西县| 兴义市| 阜新市| 奈曼旗| 莒南县| 敦煌市| 准格尔旗| 自治县| 毕节市|