文章參考:http://stackoverflow.com/questions/6224052/what-is-the-difference-between-a-string-and-a-byte-string
計算機唯一可以存儲的是字節。
要在計算機中存儲任何東西,您必須先對其進行編碼,即將其轉換為字節。例如:
- 如果你想存儲的音樂,你必須先進行編碼使用它MP3,WAV等等。
- 如果你想存儲圖片,必須先進行編碼使用它PNG,JPEG等等。
- 如果你想存儲文本,必須先進行編碼使用它ASCII,UTF-8等等。
MP3,WAV,PNG,JPEG,ASCII和UTF-8是的示例編碼。編碼是以字節表示音頻,圖像,文本等的格式。
在Python中,一個字節串(byte string)就是:一個字節序列。它不是人類可讀的。在抽象的表層(hook)下,必須將所有內容轉換為字節串,然后才能存儲在計算機中。
另一方面,通常稱為“字符串”的字符串是字符序列。它是人類可讀的。字符串不能直接存儲在計算機中,它必須首先編碼(轉換成字節串)。有多種編碼格式,通過它們可以將字符串轉換為字節串,例如ASCII格式和UTF-8格式。
'I am a string'.encode('ASCII')
以上Python代碼將'I am a string'
使用編碼對字符串進行編碼ASCII。上述代碼編碼后的結果將是一個字節串。如果你打印它,Python將使用b'I am a string'
來代表它。但是請記住,字節字符串不是人類可讀的,只是Python ASCII在打印(print)的時候解碼它們。在Python中,字節串由b
前綴來表示,后跟字節串的ASCII表示。
如果您知道用于對其進行編碼的編碼,則字節字符串可以解碼回到字符串中。
b'I am a string'.decode('ASCII')
上述代碼將返回原始字符串'I am a string'。
編碼和解碼是反向操作。一切都必須先編碼,然后才能寫入磁盤,并且必須先將其解碼,才能被人類讀懂。