Вставка символа новой строки после каждых 76 символов в строке base64

Я пытаюсь преобразовать растровые изображения в строку base64, прежде чем вставлять ее в базу данных в виде двоичных сгустков. Строка base64 должна быть закодирована таким образом, чтобы их новый символ строки после каждых 76 символов. Что лучше подходящие для Python способ сделать это?

5 ответов


'\n'.join(s[pos:pos+76] for pos in xrange(0, len(s), 76))

для Python версии 3:

import base64
base64.encodebytes(s)

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

кодируйте байт-подобный объект s, который может содержать произвольные двоичные данные, и возвращайте байты, содержащие данные в кодировке base64, с новыми строками (b'\n'), вставленными после каждых 76 байтов вывода, и гарантируя, что есть конечная новая строка, согласно RFC 2045 (ПАНТОМИМА.)

пример:

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

>>> 

для Python версии 2:

import base64
base64.encodestring(s)

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

Закодируйте строку s, которая может содержать произвольные двоичные данные, и верните строку, содержащую одну или несколько строк данных, закодированных в base64. encodestring() возвращает строку, содержащую одну или несколько строк в base64-закодированных данных, включая дополнительную пустую строку ('\n').

документы для версии 2, безусловно, могут быть написаны более четко, но он делает то, что вы хотите.

пример:

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

>>> 

Если вы хотите разрыв строки, Не используйте прямой пакет base64, используйте тот, который указан в электронной почте:

import email
print email.base64MIME.encode(your_string)

он разбивает закодированную строку на 76 символов


Так как Base64 мандаты фиксированной длины строки (64 или 76 символов, в зависимости от какую версию вы смотрите на), библиотека, которая создает строку Base64, уже должна это сделать (или, по крайней мере, иметь возможность сделать это).


вы должны использовать строгие кодирования. Это добавит новую строку

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