2011-08-11 23 views
5

這是從Dive Into Python 3關於串的部分:Python的字節對象是否也稱爲字符串?

在Python 3,所有的字符串是Unicode字符序列。沒有像用utf-8編碼的Python字符串或編碼爲CP-1252的Python字符串那樣的東西。 「這個字符串是utf-8嗎?」是一個無效的問題。 utf-8是一種將字符編碼爲字節序列的方式。如果你想獲取一個字符串並將其轉換爲一個特定字符編碼的字節序列,Python 3可以幫助你。如果你想要把一串字節變成一個字符串,那麼Python 3也可以幫助你。字節不是字符;字節是字節。人物是一個抽象。字符串是這些抽象的序列。今天

早些時候我用hashlib模塊並閱讀幫助文本md5,上面寫着:

返回一個新的MD5哈希對象;可以使用字符串進行初始化。

嗯,它不接受string - 它接受bytes對象。

也許我正在讀這個東西太多了,但是如果應該使用幫助文本bytes來替代它,那麼它會更有意義嗎?或者,人們對字符串和字節使用相同的名稱?

+0

你在看什麼版本的Python文檔? 2.7沒有做出所需的3k區分(顯然是呵呵),但是我有3k的文檔。 (順便說一句,LOK的粉絲?:)) – Skurmedel

+0

現在不記得確切的版本,甚至可能是無法... 3的東西。 LOK搖滾;) – roqvist

回答

6

在Python 2和3中,str既用於字符串也用於字節。事實上,直到Python 2.6,甚至沒有一個bytes類型(並在2.6和2.7,bytes is str)。

hashlib文檔中提到的不一致性是該歷史的一個人爲因素。

+0

我明白了,這是有道理的。謝謝 – roqvist

5

可能幫助是從Python2中遺留下來的。

這是更大的一個變化2至3

 
    Python2   Python3 

    str    bytes 
    unicode   str 

python2.6的+開始爲變化做好準備通過使bytesstr

的代名詞,您應該報告給開發商(除非它已經被修復 - 我在這裏只有3.1.2)。我認爲應該改進措辭

+0

謝謝,我會看到報告它 – roqvist

相關問題