python bytearray/bytes/string區別(47)

目錄

一.字節與字符的區別

1.字節概念

2.字符概念

3.字符串概念

4.字節串概念

二.str、bytes和bytearray區別

三.string與bytes/bytearray相互轉換

1.string經過編碼encode轉化成bytes

2.bytes經過解碼decode轉化成string

 

 


一.字節與字符的區別

在講解 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教程公衆號

                                                                                               猿說python

                                                                                            微信公衆號 掃一掃關注

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章