目錄
一.字節與字符的區別
在講解 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
猜你喜歡:
轉載請註明:猿說Python » python bytearray/bytes/string區別
技術交流、商務合作請直接聯繫博主
掃碼或搜索:猿說python
猿說python
微信公衆號 掃一掃關注