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

base64.md

180 строк · 20.0 КБ · обычная страница · сырой текст · скачать

1> **Источник:** https://python-all.ru/3.7/library/base64.html2>3> «Документация Python на русском» – неофициальный перевод официальной документации Python: версии от 2.6 до 3.16, полнотекстовый поиск, английский оригинал рядом с переводом. Эта Markdown-версия страницы предназначена для работы с LLM: вставьте её в ChatGPT, Claude или Cursor.45---67# [`base64`](https://python-all.ru/3.7/library/base64.html#module-base64) – кодирование данных Base16, Base32, Base64, Base8589**Исходный код:** [Lib/base64.py](https://python-all.ru/src/3.7/Lib/base64.py)1011---1213Этот модуль предоставляет функции для кодирования двоичных данных в печатаемые символы ASCII и декодирования таких кодировок обратно в двоичные данные. Он предоставляет функции кодирования и декодирования для кодировок, указанных в [**RFC 3548**](https://python-all.ru/3.7/library/base64.html), который определяет алгоритмы Base16, Base32 и Base64, а также для кодировок Ascii85 и Base85, являющихся стандартом де-факто.1415Кодировки [**RFC 3548**](https://python-all.ru/3.7/library/base64.html) подходят для кодирования двоичных данных, чтобы их можно было безопасно отправлять по электронной почте, использовать как части URL или включать в HTTP POST-запросы. Алгоритм кодирования не совпадает с программой **uuencode**.1617Этот модуль предоставляет два интерфейса. Современный интерфейс поддерживает кодирование [байтоподобных объектов](https://python-all.ru/3.7/glossary.html#term-bytes-like-object) в ASCII [`bytes`](https://python-all.ru/3.7/library/stdtypes.html#bytes) и декодирование [байтоподобных объектов](https://python-all.ru/3.7/glossary.html#term-bytes-like-object) или строк, содержащих ASCII, в [`bytes`](https://python-all.ru/3.7/library/stdtypes.html#bytes). Поддерживаются оба алфавита base-64, определённые в [**RFC 3548**](https://python-all.ru/3.7/library/base64.html) (обычный и безопасный для URL и файловых систем).1819Устаревший интерфейс не поддерживает декодирование из строк, но предоставляет функции для кодирования и декодирования с [файловыми объектами](https://python-all.ru/3.7/glossary.html#term-file-object). Он поддерживает только стандартный алфавит Base64 и добавляет символы новой строки каждые 76 символов в соответствии с [**RFC 2045**](https://python-all.ru/3.7/library/base64.html). Обратите внимание: если вам нужна поддержка [**RFC 2045**](https://python-all.ru/3.7/library/base64.html), вероятно, стоит обратить внимание на пакет [`email`](https://python-all.ru/3.7/library/email.html#module-email).2021Изменено в версии 3.3: Теперь функции декодирования современного интерфейса принимают строки Unicode, содержащие только ASCII.2223Изменено в версии 3.4: Теперь все функции кодирования и декодирования в этом модуле принимают любые [байтоподобные объекты](https://python-all.ru/3.7/glossary.html#term-bytes-like-object). Добавлена поддержка Ascii85/Base85.2425Современный интерфейс предоставляет:2627#### `base64.b64encode(s, altchars=None)`2829Кодирует [байтоподобный объект](https://python-all.ru/3.7/glossary.html#term-bytes-like-object) *s* с помощью Base64 и возвращает закодированный [`bytes`](https://python-all.ru/3.7/library/stdtypes.html#bytes).3031Необязательный параметр *altchars* должен быть [байтоподобным объектом](https://python-all.ru/3.7/glossary.html#term-bytes-like-object) длиной не менее 2 (дополнительные символы игнорируются), который задаёт альтернативный алфавит для символов `+` и `/`. Это позволяет приложению, например, генерировать строки Base64, безопасные для URL или файловых систем. Значение по умолчанию – `None`, для которого используется стандартный алфавит Base64.3233#### `base64.b64decode(s, altchars=None, validate=False)`3435Декодирует [байтоподобный объект](https://python-all.ru/3.7/glossary.html#term-bytes-like-object), закодированный в Base64, или ASCII-строку *s* и возвращает декодированный [`bytes`](https://python-all.ru/3.7/library/stdtypes.html#bytes).3637Необязательный параметр *altchars* должен быть [байтоподобным объектом](https://python-all.ru/3.7/glossary.html#term-bytes-like-object) или ASCII-строкой длиной не менее 2 (дополнительные символы игнорируются), который задаёт альтернативный алфавит, используемый вместо символов `+` и `/`.3839Исключение [`binascii.Error`](https://python-all.ru/3.7/library/binascii.html#binascii.Error) вызывается, если *s* имеет неправильное дополнение.4041Если *validate* равен `False` (по умолчанию), символы, не входящие ни в обычный алфавит base-64, ни в альтернативный, отбрасываются перед проверкой дополнения. Если *validate* равен `True`, такие символы, не являющиеся буквами алфавита, приводят к [`binascii.Error`](https://python-all.ru/3.7/library/binascii.html#binascii.Error).4243#### `base64.standard_b64encode(s)`4445Кодирует [байтоподобный объект](https://python-all.ru/3.7/glossary.html#term-bytes-like-object) *s* с использованием стандартного алфавита Base64 и возвращает закодированный [`bytes`](https://python-all.ru/3.7/library/stdtypes.html#bytes).4647#### `base64.standard_b64decode(s)`4849Декодирует [байтоподобный объект](https://python-all.ru/3.7/glossary.html#term-bytes-like-object) или ASCII-строку *s* с использованием стандартного алфавита Base64 и возвращает декодированный [`bytes`](https://python-all.ru/3.7/library/stdtypes.html#bytes).5051#### `base64.urlsafe_b64encode(s)`5253Кодирует [байтоподобный объект](https://python-all.ru/3.7/glossary.html#term-bytes-like-object) *s* с использованием алфавита, безопасного для URL и файловых систем, который подставляет `-` вместо `+` и `_` вместо `/` в стандартном алфавите Base64, и возвращает закодированный [`bytes`](https://python-all.ru/3.7/library/stdtypes.html#bytes). Результат всё ещё может содержать `=`.5455#### `base64.urlsafe_b64decode(s)`5657Декодирует [байтоподобный объект](https://python-all.ru/3.7/glossary.html#term-bytes-like-object) или ASCII-строку *s* с использованием алфавита, безопасного для URL и файловых систем, который подставляет `-` вместо `+` и `_` вместо `/` в стандартном алфавите Base64, и возвращает декодированный [`bytes`](https://python-all.ru/3.7/library/stdtypes.html#bytes).5859#### `base64.b32encode(s)`6061Кодирует [байтоподобный объект](https://python-all.ru/3.7/glossary.html#term-bytes-like-object) *s* с помощью Base32 и возвращает закодированный [`bytes`](https://python-all.ru/3.7/library/stdtypes.html#bytes).6263#### `base64.b32decode(s, casefold=False, map01=None)`6465Декодирует закодированный Base32 [байтоподобный объект](https://python-all.ru/3.7/glossary.html#term-bytes-like-object) или ASCII-строку *s* и возвращает декодированные [`bytes`](https://python-all.ru/3.7/library/stdtypes.html#bytes).6667Необязательный флаг *casefold* указывает, допускается ли строчный алфавит на входе. Из соображений безопасности по умолчанию используется `False`.6869[**RFC 3548**](https://python-all.ru/3.7/library/base64.html) допускает необязательное отображение цифры 0 (ноль) на букву O (о) и необязательное отображение цифры 1 (один) на букву I(ай) или букву L (эл). Необязательный аргумент *map01*, когда он не `None`, указывает, на какую букву должна отображаться цифра 1 (когда *map01* не `None`, цифра 0 всегда отображается на букву O). Из соображений безопасности значением по умолчанию является `None`, поэтому цифры 0 и 1 не допускаются во входных данных.7071Исключение [`binascii.Error`](https://python-all.ru/3.7/library/binascii.html#binascii.Error) возникает, если *s* имеет некорректное дополнение или если во входных данных присутствуют неалфавитные символы.7273#### `base64.b16encode(s)`7475Кодирует [байтоподобный объект](https://python-all.ru/3.7/glossary.html#term-bytes-like-object) *s* с помощью Base16 и возвращает закодированные [`bytes`](https://python-all.ru/3.7/library/stdtypes.html#bytes).7677#### `base64.b16decode(s, casefold=False)`7879Декодирует закодированный Base16 [байтоподобный объект](https://python-all.ru/3.7/glossary.html#term-bytes-like-object) или ASCII-строку *s* и возвращает декодированные [`bytes`](https://python-all.ru/3.7/library/stdtypes.html#bytes).8081Необязательный флаг *casefold* указывает, допускается ли строчный алфавит на входе. Из соображений безопасности по умолчанию используется `False`.8283Исключение [`binascii.Error`](https://python-all.ru/3.7/library/binascii.html#binascii.Error) возникает, если *s* имеет некорректное дополнение или если во входных данных присутствуют неалфавитные символы.8485#### `base64.a85encode(b, *, foldspaces=False, wrapcol=0, pad=False, adobe=False)`8687Кодирует [байтоподобный объект](https://python-all.ru/3.7/glossary.html#term-bytes-like-object) *b* с помощью Ascii85 и возвращает закодированные [`bytes`](https://python-all.ru/3.7/library/stdtypes.html#bytes).8889*foldspaces* – необязательный флаг, который использует специальную короткую последовательность 'y' вместо 4 последовательных пробелов (ASCII 0x20), как поддерживается в 'btoa'. Эта возможность не поддерживается «стандартной» кодировкой Ascii85.9091*wrapcol* управляет, должны ли в вывод добавляться символы новой строки (`b'\n'`). Если это значение не равно нулю, каждая строка вывода будет длиной не более этого количества символов.9293*pad* управляет тем, дополняются ли входные данные до кратного 4 перед кодированием. Обратите внимание, что реализация `btoa` всегда выполняет дополнение.9495*adobe* управляет тем, обрамляется ли закодированная последовательность байтов `<~` и `~>`, что используется в реализации Adobe.9697Новое в версии 3.4.9899#### `base64.a85decode(b, *, foldspaces=False, adobe=False, ignorechars=b' \t\n\r\v')`100101Декодирует Ascii85-закодированный [байтоподобный объект](https://python-all.ru/3.7/glossary.html#term-bytes-like-object) или ASCII-строку *b* и возвращает декодированный [`bytes`](https://python-all.ru/3.7/library/stdtypes.html#bytes).102103*foldspaces* – это флаг, указывающий, следует ли принимать короткую последовательность 'y' в качестве сокращения для 4 последовательных пробелов (ASCII 0x20). Эта возможность не поддерживается «стандартной» кодировкой Ascii85.104105*adobe* управляет тем, находится ли входная последовательность в формате Adobe Ascii85 (т.е. обрамляется с помощью \<~ и ~\>).106107*ignorechars* должен быть [байтоподобным объектом](https://python-all.ru/3.7/glossary.html#term-bytes-like-object) или строкой ASCII, содержащей символы, которые следует игнорировать во входных данных. Должен содержать только пробельные символы; по умолчанию содержит все пробельные символы ASCII.108109Новое в версии 3.4.110111#### `base64.b85encode(b, pad=False)`112113Кодирует [байтоподобный объект](https://python-all.ru/3.7/glossary.html#term-bytes-like-object) *b* с помощью base85 (используется, например, в двоичных diff-файлах в стиле git) и возвращает закодированный [`bytes`](https://python-all.ru/3.7/library/stdtypes.html#bytes).114115Если *pad* истинно, входные данные дополняются `b'\0'` так, чтобы их длина была кратна 4 байтам перед кодированием.116117Новое в версии 3.4.118119#### `base64.b85decode(b)`120121Декодирует закодированный в base85 [байтоподобный объект](https://python-all.ru/3.7/glossary.html#term-bytes-like-object) или строку ASCII *b* и возвращает декодированный [`bytes`](https://python-all.ru/3.7/library/stdtypes.html#bytes). Дополнение неявно удаляется при необходимости.122123Новое в версии 3.4.124125Устаревший интерфейс:126127#### `base64.decode(input, output)`128129Декодирует содержимое бинарного файла *input* и записывает полученные бинарные данные в файл *output*. *input* и *output* должны быть [файловыми объектами](https://python-all.ru/3.7/glossary.html#term-file-object). *input* будет читаться до тех пор, пока `input.readline()` не вернёт пустой bytes-объект.130131#### `base64.decodebytes(s)`132133Декодирует [байтоподобный объект](https://python-all.ru/3.7/glossary.html#term-bytes-like-object) *s*, который должен содержать одну или несколько строк данных, закодированных в base64, и возвращает декодированный [`bytes`](https://python-all.ru/3.7/library/stdtypes.html#bytes).134135Новое в версии 3.1.136137#### `base64.decodestring(s)`138139Устаревший псевдоним для [`decodebytes()`](https://python-all.ru/3.7/library/base64.html#base64.decodebytes).140141Устарело с версии 3.1.142143#### `base64.encode(input, output)`144145Кодирует содержимое бинарного файла *input* и записывает полученные данные в кодировке base64 в файл *output*. *input* и *output* должны быть [файловыми объектами](https://python-all.ru/3.7/glossary.html#term-file-object). *input* будет читаться до тех пор, пока `input.read()` не вернёт пустой bytes-объект. [`encode()`](https://python-all.ru/3.7/library/base64.html#base64.encode) вставляет символ новой строки (`b'\n'`) после каждых 76 байт выходных данных, а также гарантирует, что выходные данные всегда заканчиваются новой строкой, в соответствии с [**RFC 2045**](https://python-all.ru/3.7/library/base64.html) (MIME).146147#### `base64.encodebytes(s)`148149Кодирует [байтоподобный объект](https://python-all.ru/3.7/glossary.html#term-bytes-like-object) *s*, который может содержать произвольные бинарные данные, и возвращает [`bytes`](https://python-all.ru/3.7/library/stdtypes.html#bytes), содержащее данные в кодировке base64, с символами новой строки (`b'\n'`), вставляемыми после каждых 76 байт выходных данных, и гарантирует наличие завершающего перевода строки в соответствии с [**RFC 2045**](https://python-all.ru/3.7/library/base64.html) (MIME).150151Новое в версии 3.1.152153#### `base64.encodestring(s)`154155Устаревший псевдоним для [`encodebytes()`](https://python-all.ru/3.7/library/base64.html#base64.encodebytes).156157Устарело с версии 3.1.158159Пример использования модуля:160161```python162>>> import base64163>>> encoded = base64.b64encode(b'data to be encoded')164>>> encoded165b'ZGF0YSB0byBiZSBlbmNvZGVk'166>>> data = base64.b64decode(encoded)167>>> data168b'data to be encoded'169```170171> **См. также**172>173> **Модуль [`binascii`](https://python-all.ru/3.7/library/binascii.html#module-binascii)**174>175> Вспомогательный модуль, содержащий преобразования ASCII-в-двоичный и двоичный-в-ASCII.176>177> **[**RFC 1521**](https://python-all.ru/3.7/library/base64.html) – MIME (Многоцелевые расширения интернет-почты) Часть 1: Механизмы указания и описания формата тел интернет-сообщений**178>179> Раздел 5.2, «Base64 Content-Transfer-Encoding», содержит определение кодировки base64.180