Вставка символа новой строки после каждых 76 символов в строке base64 - PullRequest
8 голосов
/ 20 мая 2010

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

Ответы [ 5 ]

10 голосов
/ 30 августа 2013

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

import base64
base64.encodebytes(s)

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

Кодировать байтовоподобный объект s, который может содержать произвольные двоичные данные, и возвращать байты, содержащие данные, закодированные в base64, с символами новой строки (b '\ n'), вставляемыми после каждых 76 байтов вывода, и гарантируя, что есть завершающий перевод строки согласно RFC 2045 (MIME).

Пример:

>>> 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==

>>> 
9 голосов
/ 20 мая 2010
'\n'.join(s[pos:pos+76] for pos in xrange(0, len(s), 76))
3 голосов
/ 20 декабря 2012

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

import email
print email.base64MIME.encode(your_string)

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

1 голос
/ 20 мая 2010

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

0 голосов
/ 09 сентября 2013

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

'your_string_goes_here'.encode('base64', 'strict')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...