2017-01-02 110 views
3

有人可以確定這些符號是bytes是什麼?乍一看,我傾向於認爲「十六進制」,但我不承認有什麼東西像xf1Ye1fl是:Python的奇怪符號3個字節

b'vy\xe9\xb5\xa2\xba\xf1Y\xe8\xe1fl\x1d\x87\xacC' 

我得到這個,當我使用some_text.encode('utf-8')編碼的東西。

我想獲得可以傳遞給與Python 2的字節字符串一起工作的加密方法的字節。

回答

4

你說得對 - 這是一個十六進制符號。

在字面一個字節,這不能由可打印的ASCII字符來表示(或標準中的一個逸出\n\t\r)任何字節被表示爲\xNN,其中NN是的2位十六進制表示法字節。

有什麼讓你感到困惑的是,你誤以爲, \xf1Y單個轉義序列的時候,其實它代表兩個字節:

>>> len(b'\xf1Y') 
2 
>>> [bytes([b]) for b in b'\xf1Y'] 
[b'\xf1', b'Y'] 

如果您遍歷一個字節的對象,你會得到字節的整數值回:

>>> list(b'vy\xe9\xb5\xa2\xba\xf1Y\xe8\xe1fl\x1d\x87\xacC') 
[118, 121, 233, 181, 162, 186, 241, 89, 232, 225, 102, 108, 29, 135, 172, 67] 
>>> bytes([118]) 
b'v' 
>>> bytes([121]) 
b'y' 
>>> bytes([233]) 
b'\xe9' 

escape sequences in Python string and bytes objects的文檔有更多關於Python可以理解的轉義序列的信息(儘管以上是用於表示字節對象的唯一轉義序列)。

+1

謝謝!是的,這就是讓我困惑的原因。我不知道它是在/ x__十六進制代碼旁邊混合文字字符描述。 –