2012-11-07 21 views
10

से स्ट्रिंग को कनवर्ट करना मैं दो प्रोग्राम लिखने की कोशिश कर रहा हूं जो स्ट्रिंग को बेस 64 में परिवर्तित करता है और फिर दूसरा जो बेस 64 एन्कोडेड स्ट्रिंग लेता है और उसे स्ट्रिंग में बदल देता है।
अब तक मैं अतीत बेस 64 एन्कोडिंग हिस्सा प्राप्त नहीं कर सकते जैसा कि मैंने str त्रुटिबेस 64

TypeError: expected bytes, not str 

मेरे कोड इस अब तक

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

चूंकि पायथन -3 में यूनिकोड स्ट्रिंग है, बाइट्स डेटाटाइप पेश किया गया था। आपको अपनी स्ट्रिंग को बाइटियर में बदलना होगा, उदा। 'बी = बाइट्स (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 सामान के संदर्भ में: पैदावार ऊपर एन्कोडिंग के लिए मूल्य के रूप में 'बेस 64' का उपयोग करना त्रुटि:

LookupError: unknown encoding: base64 

ओपन सांत्वना और निम्नलिखित में प्रकार:

import base64 
help(base64) 

आप देखेंगे कि बेस 64 में दो बहुत आसान काम हैं, अर्थात् b64decode और b64encode। बी 64 डीकोड एक बाइट सरणी देता है और b64encode को बाइट्स सरणी की आवश्यकता होती है।

स्ट्रिंग को इसके बेस 64 प्रतिनिधित्व में बदलने के लिए आपको पहले इसे बाइट्स में परिवर्तित करने की आवश्यकता है। मुझे यूटीएफ -8 पसंद है लेकिन आपको जो भी एन्कोडिंग चाहिए, उसका उपयोग करें ...

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

def base64ToString(b): 
    return base64.b64decode(b).decode('utf-8') 
संबंधित मुद्दे