欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

那么如何定義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類型之間的轉換,比如從網絡上讀取到二進制數據后,python需要你顯示的將其轉換為str類型,也就是說 python不會隱式在str和bytes之間轉換 ,看上去麻煩了很多,但會減少你出錯的幾率,自己明確自己做要的事情。

如果要將str轉換為bytes,必須選擇一個編碼,明確二進制數據是如何編碼的,比如:

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

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

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

總之一句話,“ python內部使用unicode,外部使用bytes類型 ”,python內建庫中,很多函數會說明需要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,會在內部做很多轉換工作,讓你意識不到bytes類型的存在,雖然生產力提高了,但對于理解python并沒有太大的好處。

如果要充分理解bytes和str的應用,可以參考open和write兩個內建函數。

使用文本方式打開文件,python在內部會自動轉換為str類型,比如:

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

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

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

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

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

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

總結

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

相關文章

  • python中的psutil模塊詳解(cpu、內存、磁盤情況、結束指定進程)

    python中的psutil模塊詳解(cpu、內存、磁盤情況、結束指定進程)

    這篇文章主要介紹了python中的psutil(cpu、內存、磁盤情況、結束指定進程),本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • python畫圖系列之個性化顯示x軸區(qū)段文字的實例

    python畫圖系列之個性化顯示x軸區(qū)段文字的實例

    今天小編就為大家分享一篇python畫圖系列之個性化顯示x軸區(qū)段文字的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-12-12
  • 使用Pandas實現可視化帶有標簽列的數據表

    使用Pandas實現可視化帶有標簽列的數據表

    Pandas是Python中一個靈活強大的數據處理庫,它提供了大量數據操作和分析工具,本文我們將討論如何使用Pandas可視化帶有標簽列的數據表,以便更好地呈現和傳達數據的信息,需要的可以了解下
    2024-02-02
  • python實現滑雪游戲

    python實現滑雪游戲

    這篇文章主要為大家詳細介紹了python實現滑雪游戲,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-02-02
  • Python正則表達式中的'r'用法總結

    Python正則表達式中的'r'用法總結

    正則表達式即使用一個字符串來描述、匹配一系列某個語法規(guī)則的字符串,python中r作用是除去''里面轉意字符,在pyhton自動化中比較常用的,下面這篇文章主要給大家介紹了關于Python正則表達式中的'r'用法總結的相關資料,需要的朋友可以參考下
    2023-04-04
  • Python基礎教程之循環(huán)語句(for、while和嵌套循環(huán))

    Python基礎教程之循環(huán)語句(for、while和嵌套循環(huán))

    這篇文章主要給大家介紹了關于Python基礎教程之循環(huán)語句(for、while和嵌套循環(huán))的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2021-03-03
  • Python模塊搜索路徑代碼詳解

    Python模塊搜索路徑代碼詳解

    這篇文章主要介紹了Python模塊搜索路徑代碼詳解,分享了相關代碼示例,小編覺得還是挺不錯的,具有一定借鑒價值,需要的朋友可以參考下
    2018-01-01
  • python中安裝django模塊的方法

    python中安裝django模塊的方法

    這篇文章主要介紹了python中安裝django模塊的方法,本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-03-03
  • django之使用celery-把耗時程序放到celery里面執(zhí)行的方法

    django之使用celery-把耗時程序放到celery里面執(zhí)行的方法

    今天小編就為大家分享一篇django之使用celery-把耗時程序放到celery里面執(zhí)行的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • python單向鏈表的基本實現與使用方法【定義、遍歷、添加、刪除、查找等】

    python單向鏈表的基本實現與使用方法【定義、遍歷、添加、刪除、查找等】

    這篇文章主要介紹了python單向鏈表的基本實現與使用方法,結合實例形式分析了Python單向鏈表的定義、遍歷、添加、刪除、查找等相關操作技巧,需要的朋友可以參考下
    2019-10-10

最新評論