2012-11-07 105 views
10

我正在嘗試編寫兩個程序,一個將字符串轉換爲base64,然後是另一個需要base64編碼的字符串並將其轉換回字符串的程序。
到目前爲止,我不能讓過去的base64編碼部分,因爲我不斷收到錯誤將字符串轉換爲64位的字符串

TypeError: expected bytes, not str 

我的代碼看起來像這樣,到目前爲止

def convertToBase64(stringToBeEncoded): 
import base64 
EncodedString= base64.b64encode(stringToBeEncoded) 
return(EncodedString) 
+5

因爲python-3有unicode字符串,所以引入了字節數據類型。您必須將您的字符串轉換爲一個字節數組,例如通過使用'b = bytes(mystring,'utf-8')',然後使用'b'作爲編碼:'EncodedString = base64.b64encode(b)',它將返回一個字節數組 –

回答

25

的字符串已經「解碼」,因此海峽類沒有「解碼」 function.Thus:

AttributeError: type object 'str' has no attribute 'decode' 

如果要解碼的字節數組,並把它變成一個字符串電話:

the_thing.decode(encoding) 

如果要編碼的字符串(它變成一個字節數組)調用:

the_string.encode(encoding) 

在基部64的東西的術語: 使用「的base64」作爲以上的產率編碼的值錯誤:

LookupError: unknown encoding: base64 

開啓在下面的一個控制檯和類型:

import base64 
help(base64) 

你會看到base64有兩個非常方便的功能,即b64decode和b64encode。 b64解碼返回一個字節數組,並且b64encode需要一個字節數組。

要將字符串轉換爲base64表示,首先需要將其轉換爲字節。我喜歡utf-8,但使用任何你需要的編碼...

import base64 
def stringToBase64(s): 
    return base64.b64encode(s.encode('utf-8')) 

def base64ToString(b): 
    return base64.b64decode(b).decode('utf-8')