一.位元組與字符的區別
在講解 bytearray / bytes / string 三者的區別之前,有必要來了解一下位元組和字符的區別:
1.位元組概念
位元組(Byte )是計算機資訊技術用于計量存盤容量的一種計量單位,作為一個單位來處理的一個二進制數字串,是構成資訊的一個小單位,最常用的位元組是八位的位元組,即它包含八位的二進制數;
位(bit)是計算機 內部資料 儲存的最小單位,11001100是一個八位二進制數;
位元組(byte)是計算機中 資料處理 的基本單位,習慣上用大寫 B 來表示,1B(byte,位元組)= 8bit(位);
1 KB = 1024 B(位元組); 1 MB = 1024 KB; (2^10 B) 1 GB = 1024 MB; (2^20 B) 1 TB = 1024 GB; (2^30 B)
2.字符概念
字符 是指計算機中使用的字母、數字、字和符號,包括:1、2、3、A、B、C、~!·#¥%……—*()——+等等;
一般 utf-8 編碼下,一個漢字 字符 占用 3 個 位元組;
一般 gbk 編碼下,一個漢字 字符 占用 2 個 位元組;
3.字串概念
字串是字符序列,它是一種抽象的概念,不能直接存盤在硬碟 – 位元組串是給計算機看的,給計算機傳輸或者保存的,在Python中,程式中的文本都用字串表示;
4.位元組串概念
位元組串是位元組序列,它可以直接存盤在硬碟, 位元組串是給計算機看的,它們之間的映射被稱為編碼/解碼 – 字串是給人看的,用來操作的;
# !usr/bin/env python # -*- coding:utf-8 _*- """ @Author:何以解憂 @Blog(個人博客地址): shuopython.com @WeChat Official Account(微信公眾號):猿說python @Github:www.github.com @File:python_bytes_string_2.py @Time:2020/2/29 21:25 @Motto:不積跬步無以至千里,不積小流無以成江海,程式人生的精彩需要堅持不懈地積累! """ if __name__ == "__main__": # 字串str 轉 位元組bytes s = '猿說python' b = s.encode() # 編碼,默認的是UTF-8 print(b) print(type(b)) # 位元組bytes 轉 字串str b = b'\xe7\x8c\xbf\xe8\xaf\xb4python'.decode(encoding='UTF-8') # 解碼 print(b) print(type(b))
輸出結果:
b'\xe7\x8c\xbf\xe8\xaf\xb4python' <class 'bytes'> 猿說python <class 'str'>
二.str、bytes和bytearray區別
1.str是字符資料(如:文本,給人看的),bytes和bytearray是位元組資料(如:二進制資料,給計算機看的),它們都是序列,可以進行迭代遍歷,
2.str和bytes是不可變序列,通過str型別的通用函式,比如find()、replace()、islower()等函式修改后實際上是重新創建了新物件;bytearray是可變序列,可以原處修改位元組,
3.bytes和bytearray都能使用str型別的通用函式,比如find()、replace()、islower()等,不能用的是str的格式化操作,
4.python 3.x中默認str是unicode格式編碼的,例如UTF-8字符集,
三.string與bytes/bytearray相互轉換
1.string經過編碼encode轉化成bytes
if __name__ == "__main__": s = "shuopython.com" # 將字串轉換為位元組物件 b2 = bytes(s, encoding='utf8') # 必須制定編碼格式 # print(b2) # 字串encode將獲得一個bytes物件 b3 = str.encode(s) b4 = s.encode() print(b3) print(type(b3)) print(b4) print(type(b4))
輸出結果:
b'shuopython.com' <class 'bytes'> b'shuopython.com' <class 'bytes'>
2.bytes經過解碼decode轉化成string
if __name__ == "__main__": # 位元組物件b b = bytes("python教程-猿說python","utf-8") #方案一: s2 = bytes.decode(b) # 方案二: s3 = b.decode() print(s2) print(s3)
輸出結果:
python教程-猿說python
python教程-猿說python
注意:如果bytes初始化含有中文的字串必須設定編碼格式,否則報錯:TypeError: string argument without an encoding
b = bytes("猿說python") >>> b = bytes("猿說python") >>> TypeError: string argument without an encoding
猜你喜歡:
1.python bytes
2.python 可變資料型別和不可變資料型別
3.python bytes和string相互轉換
轉載請注明:猿說Python ? python bytearray/bytes/string區別
技術交流、商務合作請直接聯系博主 掃碼或搜索:猿說python
猿說python
微信公眾號 掃一掃關注
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/183597.html
標籤:Python
上一篇:python_學習筆記
下一篇:圖解Python網路編程
