2015-10-21 9 views
5

मैं सोच रहा था कि एक बाइट स्ट्रिंग को परिवर्तित करना संभव है जो मुझे एक स्ट्रिंग में फ़ाइल पढ़ने से मिला है (इसलिए type(output) == str)। Google पर अब तक जो कुछ भी मिला है, वह How do you base-64 encode a PNG image for use in a data-uri in a CSS file? जैसा उत्तर दिया गया है, ऐसा लगता है कि यह पाइथन 2 में काम करेगा (जहां, अगर मुझे गलत नहीं लगता है, तो तार बाइट स्ट्रिंग्स वैसे भी थे), लेकिन जो अजगर में काम नहीं करता है 3.4 अब और।बाइट स्ट्रिंग को बेस 64-एन्कोडेड स्ट्रिंग में परिवर्तित करें (आउटपुट बाइट स्ट्रिंग नहीं है)

कारण मैं एक साधारण स्ट्रिंग को यह जिसके परिणामस्वरूप बाइट स्ट्रिंग परिवर्तित करना चाहते हैं कि मैं एक JSON ऑब्जेक्ट में स्टोर करने के लिए इस बेस 64 एन्कोडेड डेटा का उपयोग करना चाहते है, लेकिन मैं करने के लिए इसी तरह की एक त्रुटि मिलती रहती है:

TypeError: b'Zm9v' is not JSON serializable 

यहाँ जहां यह गलत हो जाता है का एक न्यूनतम उदाहरण है:

import base64 
import json 
data = b'foo' 
myObj = [base64.b64encode(data)] 
json_str = json.dumps(myObj) 

तो मेरे सवाल है: वहाँ एक रास्ता प्रकार str का एक उद्देश्य के लिए प्रकार bytes की इस वस्तु कन्वर्ट करने के लिए है, जबकि अभी भी बेस 64 एन्कोडिंग (ताकि रखने इस उदाहरण में, मैं चाहता हूँ परिणाम ["Zm9v"] हो रहा है। क्या यह संभव है?

उत्तर

6

यह एक स्ट्रिंग में परिवर्तित करने के

data = b'foo'.decode('UTF-8') 

बजाय

data = b'foo' 

की कोशिश करो।

+0

आह स्नैप जो ऐसा लगता है कि यह काम करता है। बहुत बहुत धन्यवाद! – Joeytje50

संबंधित मुद्दे