欧美三区_成人在线免费观看视频_欧美极品少妇xxxxⅹ免费视频_a级毛片免费播放_鲁一鲁中文字幕久久_亚洲一级特黄

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

系統(tǒng) 1610 0

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

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

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

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

            
#只能允許ASCII值
x=b'abc'
y=b'\xe6\x88\x91'
print (x,y)
#對unicode字符集進(jìn)行特定編碼
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ò)上讀取到二進(jìn)制數(shù)據(jù)后,python需要你顯示的將其轉(zhuǎn)換為str類型,也就是說 python不會隱式在str和bytes之間轉(zhuǎn)換 ,看上去麻煩了很多,但會減少你出錯的幾率,自己明確自己做要的事情。

如果要將str轉(zhuǎn)換為bytes,必須選擇一個編碼,明確二進(jìn)制數(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,也需要一個編碼,必須說明的是,你必須知道 二進(jìn)制數(shù)據(jù)的編碼是什么 ,如果選錯了,轉(zhuǎn)換為unicode的時候會錯誤,另外在python內(nèi)部,它不關(guān)心二進(jì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類型(嚴(yán)格說來是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)用,可以參考o(jì)pen和write兩個內(nèi)建函數(shù)。

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

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

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

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

而如果是二進(jìn)制方式寫入,則將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)載,煩請注明出處,謝謝!


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號聯(lián)系: 360901061

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機(jī)微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對您有幫助就好】

您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長會非常 感謝您的哦?。。?/p>

發(fā)表我的評論
最新評論 總共0條評論
主站蜘蛛池模板: 免费高清成人 | 成熟自由日本语热亚洲人 | 色八影院 | 国产成人久久蜜一区二区 | 久久99精品久久久久久 | 精品久久久久久久久久久久久久 | 成人片黄网站A片免费 | 狠狠影院| 欧美国产在线观看 | 99久久免费观看 | 久久黄网| 国产毛片视频在线 | 精品视频在线观看 | 国产午夜亚洲精品 | 久久精品视在线看1 | 免费久久精品国产片香蕉 | 男女一进一出视频 | 欧美乱妇在线观看 | 色在线视频网站 | 四虎国产视频 | 日本人毛片 | 成年人福利 | 成人黄色在线观看视频 | 一级做a爰片欧美一区 | 白天操夜夜操 | 九九精品免费 | 国产亚洲一区二区三区在线观看 | 亚洲视频一区在线 | 国产精品色在线网站 | 国产一级毛片在线看 | 99久久久国产精品 | 成人免费淫片aa视频免费 | 天堂动漫| 亚洲欧美在线看 | 亚洲欧美中日韩中文字幕 | 精品视频二区 | 亚洲激情成人 | 亚洲精品一区henhen色 | 播五月开心婷婷综合 | 一区二区三区日 | 9999毛片免费看 |