2017-04-19 60 views

回答

3

他們產生相同的結果:

>>> 'ABC'.encode("ascii") 
b'ABC' 
>>> b'ABC' 
b'ABC' 

然而encode()將調用編碼器在運行時,而不是在編譯時。

0

是的,沒有。是的,就您的具體示例而言,這兩者是相同的,因爲它們會產生相同的結果。

但是,對於通用的用法,它們有一些細微的區別。例如,考慮他們對待試圖編碼非ASCII字符的不同用法:

@>>> b'Æ' 
    File "<stdin>", line 1 
SyntaxError: bytes can only contain ASCII literal characters. 
@>>> 'Æ'.encode("ascii") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
UnicodeEncodeError: 'ascii' codec can't encode character '\xc6' in position 0: ordinal not in range(128) 
2

在Python 3快速測試顯示,他們確實是等價的:

In [1]: x = b'ABC' 

In [2]: y = 'ABC'.encode('ascii') 

In [3]: x == y 
Out[3]: True 

In [4]: type(x) 
Out[4]: bytes 

In [5]: type(y) 
Out[5]: bytes 

按照official python documentation

字節文字總是以'b'或'B'作爲前綴;它們會生成字節類型的實例,而不是str類型。它們可能只包含ASCII字符;數值爲128或更大的字節必須用轉義符表示。

因此,只要所有的unicode字符串字符是ASCII,他們將被視爲相同。

+1

您應該強調,它們相等的唯一實例是unicode字符串中所有字符均爲ascii的子集。 –

+1

還要記住一個轉義字符,而技術上僅由ascii字符表示的字符可能仍然表示不能編碼爲ascii的非ascii字符。 –

相關問題