2010-05-20 20 views
7

में प्रत्येक 76 वर्णों के बाद न्यूलाइन कैरेक्टर डालने का प्रयास मैं बिटमैप छवियों को बेस 64 स्ट्रिंग में बाइनरी ब्लॉब्स के रूप में डेटाबेस में डालने से पहले कनवर्ट करने की कोशिश कर रहा हूं। बेस 64 स्ट्रिंग को इस तरह से एन्कोड किया जाना चाहिए कि प्रत्येक 76 वर्णों के बाद उनका एक नया रेखा चरित्र हो। ऐसा करने का सबसे अच्छा पायथन तरीका क्या है?बेस 64 स्ट्रिंग

उत्तर

1

के बाद से Base64 एक निश्चित लाइन की लंबाई (64 या 76 वर्ण, पर which version you look at निर्भर करता है) जनादेश, पुस्तकालय कि Base64 स्ट्रिंग का उत्पादन करना चाहिए पहले से ही है कि (या कम से कम करने के लिए एक विकल्प है) है।

3

आप लाइन ब्रेक चाहते हैं, सीधे बेस 64 पैकेज का उपयोग नहीं करते, ईमेल में से एक का उपयोग:

import email 
print email.base64MIME.encode(your_string) 

यह इनकोडिंग स्ट्रिंग विभाजित हो जाते हैं प्रत्येक 76 वर्ण

9

अजगर संस्करण के लिए 3:

import base64 
base64.encodebytes(s) 

https://docs.python.org/3/library/base64.html#base64.encodebytes

एनकोड बाइट्स जैसी वस्तु है, जो मनमाने ढंग से बाइनरी डेटा शामिल कर सकते हैं, और बेस 64 एन्कोडेड डेटा वाली बाइट्स लौटने के लिए, नई-पंक्तियों के साथ (ख '\ n') उत्पादन के हर 76 बाइट्स के बाद सम्मिलित है, और यह सुनिश्चित करना कि वहाँ आरएफसी 2045 (एमआईएमई) के अनुसार, एक पिछली नई लाइन है।

उदाहरण:

>>> print(base64.encodebytes(b'a' * 100).decode()) 
YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh 
YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQ== 

>>> 

के लिए अजगर संस्करण 2:

import base64 
base64.encodestring(s) 

http://docs.python.org/library/base64.html

एनकोड स्ट्रिंग रों है, जो मनमाने ढंग से बाइनरी डेटा शामिल कर सकते हैं, और बदले एक स्ट्रिंग युक्त एक या बेस 64-एन्कोडेड डेटा की अधिक लाइनें। एन्कोडेस्ट्रिंग() एक स्ट्रिंग देता है जिसमें बेस 64-एन्कोडेड डेटा की एक या अधिक पंक्तियां होती हैं जिसमें हमेशा एक अतिरिक्त पिछली नईलाइन ('\ n') शामिल होती है।

संस्करण 2 के लिए दस्तावेज़ निश्चित रूप से अधिक स्पष्ट रूप से लिखे जा सकते हैं, लेकिन यह वही है जो आप चाहते हैं।

उदाहरण:

>>> print base64.encodestring('a'*100) 
YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFh 
YWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYWFhYQ== 

>>> 
0

आप सख्त एन्कोडिंग का उपयोग करना चाहिए। इससे एक नई लाइन

'your_string_goes_here'.encode('base64', 'strict') 
+1

यह एक नई लाइन जोड़ देगा। एक लंबी स्ट्रिंग आज़माएं और आप देखेंगे। साथ ही, "... 'सख्त', जिसका अर्थ है कि एन्कोडिंग त्रुटियां यूनिकोड एरर बढ़ाती हैं)" https://docs.python.org/2/library/stdtypes.html?highlight=encode#str.encode –

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