Документация Python неофициальный перевод

19.6. base64 – кодировки Base16, Base32, Base64, Base85base64 – Base16, Base32, Base64, Base85 Data Encodings

Этот модуль предоставляет функции для кодирования двоичных данных в печатаемые символы ASCII и декодирования таких кодировок обратно в двоичные данные. Он предоставляет функции кодирования и декодирования для кодировок, указанных в RFC 3548, который определяет алгоритмы Base16, Base32 и Base64, а также для кодировок Ascii85 и Base85, являющихся стандартом де-факто.

Кодировки RFC 3548 подходят для кодирования двоичных данных, чтобы их можно было безопасно отправлять по электронной почте, использовать как части URL или включать в HTTP POST-запросы. Алгоритм кодирования не совпадает с программой uuencode.

Этот модуль предоставляет два интерфейса RFC 3548. Современный интерфейс поддерживает кодирование и декодирование объектов ASCII-байтовых строк, используя все три алфавита, определённые в RFC 3548 (обычный, безопасный для URL и безопасный для файловой системы). Кроме того, функции декодирования современного интерфейса также принимают строки Unicode, содержащие только ASCII-символы. Устаревший интерфейс обеспечивает кодирование и декодирование как в файлоподобные объекты, так и в байтовые строки, но только с использованием стандартного алфавита Base64.

Изменено в версии 3.3: Теперь функции декодирования современного интерфейса принимают строки Unicode, содержащие только ASCII.

Изменено в версии 3.4: Теперь все функции кодирования и декодирования в этом модуле принимают любые bytes-like object. Добавлена поддержка Ascii85/Base85.

Современный интерфейс предоставляет:

base64.b64encode(s, altchars=None)

Кодирует байтовую строку в Base64.

s – строка для кодирования. Необязательный аргумент altchars должен быть строкой длиной не менее 2 (дополнительные символы игнорируются), которая задаёт альтернативный алфавит для символов + и /. Это позволяет, например, генерировать строки Base64, безопасные для URL или файловой системы. По умолчанию используется None, при этом применяется стандартный алфавит Base64.

Возвращается закодированная байтовая строка.

base64.b64decode(s, altchars=None, validate=False)

Декодирует байтовую строку, закодированную в Base64.

s – байтовая строка для декодирования. Необязательный аргумент altchars должен быть строкой длиной не менее 2 (дополнительные символы игнорируются), которая задаёт альтернативный алфавит, используемый вместо символов + и /.

Возвращается декодированная строка. Исключение binascii.Error возбуждается, если s имеет неправильное дополнение.

Если validate равен False (по умолчанию), символы, не входящие в алфавит base64, отбрасываются перед проверкой дополнения. Если validate равен True, символы, не входящие в алфавит base64, во входных данных приводят к binascii.Error.

base64.standard_b64encode(s)

Кодирует байтовую строку s с использованием стандартного алфавита Base64.

base64.standard_b64decode(s)

Декодирует байтовую строку s с использованием стандартного алфавита Base64.

base64.urlsafe_b64encode(s)

Кодирует байтовую строку s, используя безопасный для URL алфавит, который заменяет - вместо + и _ вместо / в стандартном алфавите Base64. Результат всё ещё может содержать =.

base64.urlsafe_b64decode(s)

Декодирует байтовую строку s, используя безопасный для URL алфавит, который заменяет - вместо + и _ вместо / в стандартном алфавите Base64.

base64.b32encode(s)

Кодирует байтовую строку с использованием Base32. s – строка для кодирования. Возвращается закодированная строка.

base64.b32decode(s, casefold=False, map01=None)

Декодирует байтовую строку, закодированную в Base32.

s – байтовая строка для декодирования. Необязательный аргумент casefold – флаг, указывающий, допустим ли строчный алфавит на входе. В целях безопасности по умолчанию используется False.

RFC 3548 допускает необязательное отображение цифры 0 (ноль) на букву O (о) и необязательное отображение цифры 1 (один) на букву I (ай) или букву L (эл). Необязательный аргумент map01, если он не равен None, указывает, на какую букву должна отображаться цифра 1 (когда map01 не равен None, цифра 0 всегда отображается на букву O). В целях безопасности по умолчанию используется None, чтобы 0 и 1 не допускались во входных данных.

Возвращается декодированная байтовая строка. Исключение binascii.Error возбуждается, если s имеет неправильное дополнение или если в строке присутствуют символы, не входящие в алфавит.

base64.b16encode(s)

Кодирует байтовую строку с использованием Base16.

s – строка для кодирования. Возвращается закодированная байтовая строка.

base64.b16decode(s, casefold=False)

Декодировать строку байтов, закодированную в Base16.

s – декодируемая строка. Необязательный параметр casefold – флаг, указывающий, допустим ли алфавит в нижнем регистре на входе. Из соображений безопасности по умолчанию False.

Возвращается декодированная строка байтов. Если s дополнена неправильно или в строке есть символы, не входящие в алфавит, возбуждается TypeError.

base64.a85encode(s, *, foldspaces=False, wrapcol=0, pad=False, adobe=False)

Закодировать строку байтов с помощью Ascii85.

s – кодируемая строка. Возвращается закодированная строка байтов.

foldspaces – необязательный флаг, который использует специальную короткую последовательность 'y' вместо 4 последовательных пробелов (ASCII 0x20), как поддерживается в 'btoa'. Эта возможность не поддерживается «стандартной» кодировкой Ascii85.

wrapcol определяет, нужно ли добавлять символы новой строки ('\n') в вывод. Если значение не равно нулю, каждая строка вывода будет не длиннее этого числа символов.

pad определяет, дополняется ли входная строка до длины, кратной 4, перед кодированием. Обратите внимание, что реализация btoa всегда выполняет дополнение.

adobe управляет тем, обрамляется ли закодированная последовательность байтов <~ и ~>, что используется в реализации Adobe.

Новое в версии 3.4.

base64.a85decode(s, *, foldspaces=False, adobe=False, ignorechars=b' \t\n\r\v')

Декодировать строку байтов, закодированную Ascii85.

s – декодируемая строка байтов.

foldspaces – это флаг, указывающий, следует ли принимать короткую последовательность 'y' в качестве сокращения для 4 последовательных пробелов (ASCII 0x20). Эта возможность не поддерживается «стандартной» кодировкой Ascii85.

adobe управляет тем, находится ли входная последовательность в формате Adobe Ascii85 (т.е. обрамляется с помощью <~ и ~>).

ignorechars должен быть байтовой строкой, содержащей символы, которые следует игнорировать во входных данных. Она должна содержать только пробельные символы и по умолчанию включает все пробельные символы ASCII.

Новое в версии 3.4.

base64.b85encode(s, pad=False)

Закодировать строку байтов с помощью base85, как используется, например, в бинарных сравнениях в стиле git.

Если pad равен истине, входная строка дополняется нулевыми символами («\0»), чтобы её длина стала кратна 4 символам перед кодированием.

Новое в версии 3.4.

base64.b85decode(b)

Декодировать строку байтов, закодированную base85. При необходимости дополнение неявно удаляется.

Новое в версии 3.4.

Примечание

И Base85, и Ascii85 имеют коэффициент расширения 5 к 4 (5 символов Base85 или Ascii85 могут закодировать 4 двоичных байта), в то время как более известный Base64 имеет коэффициент расширения 6 к 4. Поэтому они более эффективны, когда пространство дорого. Они различаются деталями, такими как используемая таблица символов для кодирования.

Устаревший интерфейс:

base64.decode(input, output)

Декодировать содержимое бинарного файла input и записать полученные бинарные данные в файл output. input и output должны быть файловыми объектами. Чтение из input продолжается, пока input.read() не вернёт пустой объект bytes.

base64.decodebytes(s)
base64.decodestring(s)

Декодировать строку байтов s, которая должна содержать одну или более строк данных, закодированных base64, и вернуть строку байтов с полученными бинарными данными. decodestring – устаревший псевдоним.

Новое в версии 3.1.

base64.encode(input, output)

Закодировать содержимое бинарного файла input и записать полученные данные в кодировке base64 в файл output. input и output должны быть файловыми объектами. Чтение из input продолжается, пока input.read() не вернёт пустой объект bytes. encode() возвращает закодированные данные с добавленным символом новой строки (b'\n') в конце.

base64.encodebytes(s)
base64.encodestring(s)

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

Пример использования модуля:

>>> import base64
>>> encoded = base64.b64encode(b'data to be encoded')
>>> encoded
b'ZGF0YSB0byBiZSBlbmNvZGVk'
>>> data = base64.b64decode(encoded)
>>> data
b'data to be encoded'

См. также

Модуль binascii
Вспомогательный модуль, содержащий преобразования ASCII-в-двоичный и двоичный-в-ASCII.
RFC 1521 – MIME (Многоцелевые расширения интернет-почты) Часть 1: Механизмы указания и описания формата тел интернет-сообщений
Раздел 5.2, «Base64 Content-Transfer-Encoding», содержит определение кодировки base64.