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

binascii – Преобразование между двоичным представлением и ASCIIbinascii – Convert between binary and ASCII


Модуль binascii содержит несколько методов для преобразования между двоичным представлением и различными ASCII-кодированными двоичными представлениями. Обычно эти функции не используются напрямую – вместо них применяются модули-обёртки, такие как base64. Модуль binascii содержит низкоуровневые функции на C, которые работают быстрее и используются модулями более высокого уровня.

Примечание

a2b_* functions accept Unicode strings containing only ASCII characters. Other functions only accept bytes-like objects (such as bytes, bytearray and other objects that support the buffer protocol).

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

Модуль binascii определяет следующие функции:

binascii.a2b_uu(string)

Преобразует одну строку данных в кодировке UUencode обратно в двоичный вид и возвращает двоичные данные. Строки обычно содержат 45 двоичных байт, за исключением последней. После данных строки могут следовать пробельные символы.

binascii.b2a_uu(data, *, backtick=False)

Преобразует двоичные данные в строку символов ASCII. Возвращаемое значение – преобразованная строка, включая символ новой строки. Длина data не должна превышать 45. Если backtick равен true, нули представляются символом '`' вместо пробелов.

Изменено в версии 3.7: Добавлен параметр backtick.

binascii.a2b_base64(string, /, *, strict_mode=False)

Преобразует блок данных в кодировке base64 обратно в двоичный вид и возвращает двоичные данные. Можно передать одновременно несколько строк.

Если strict_mode равен true, будут преобразованы только корректные данные base64. Некорректные данные base64 вызовут исключение binascii.Error.

Корректный base64:

  • Соответствует спецификации RFC 3548.

  • Содержит только символы алфавита base64.

  • Не содержит лишних данных после заполнения (включая лишние символы заполнения, символы новой строки и т.д.).

  • Не начинается с символа заполнения.

Изменено в версии 3.11: Добавлен параметр strict_mode.

binascii.b2a_base64(data, *, newline=True)

Преобразует двоичные данные в строку символов ASCII в кодировке base64. Возвращаемое значение – преобразованная строка, включая символ новой строки, если newline равен true. Результат этой функции соответствует стандарту RFC 3548.

Изменено в версии 3.6: Добавлен параметр newline.

binascii.a2b_qp(data, header=False)

Преобразует блок данных в кодировке quoted-printable обратно в двоичный вид и возвращает двоичные данные. Можно передать одновременно несколько строк. Если необязательный аргумент header присутствует и равен true, символы подчёркивания будут декодированы как пробелы.

binascii.b2a_qp(data, quotetabs=False, istext=True, header=False)

Преобразует двоичные данные в одну или несколько строк символов ASCII в кодировке quoted-printable. Возвращаемое значение – преобразованная строка(и). Если необязательный аргумент quotetabs присутствует и равен true, все символы табуляции и пробелы будут закодированы. Если необязательный аргумент istext присутствует и равен true, символы новой строки не кодируются, но конечные пробелы будут закодированы. Если необязательный аргумент header присутствует и равен true, пробелы будут закодированы как символы подчёркивания в соответствии с RFC 1522. Если необязательный аргумент header присутствует и равен false, символы новой строки также будут закодированы; в противном случае преобразование перевода строки может повредить поток двоичных данных.

binascii.crc_hqx(data, value)

Вычисляет 16-битное значение CRC для data, начиная с value в качестве начального CRC, и возвращает результат. Используется полином CRC-CCITT x16 + x12 + x5 + 1, часто представляемый как 0x1021. Этот CRC используется в формате binhex4.

binascii.crc32(data[, value])

Вычисляет CRC-32 – 32-битную беззнаковую контрольную сумму data, начиная с начального CRC value. Начальное CRC по умолчанию равно нулю. Алгоритм совместим с контрольной суммой ZIP-файлов. Поскольку алгоритм разработан для использования в качестве контрольной суммы, он не подходит для использования в качестве универсальной хеш-функции. Используйте следующим образом:

print(binascii.crc32(b"hello world"))
# Или двумя частями:
crc = binascii.crc32(b"hello")
crc = binascii.crc32(b" world", crc)
print('crc32 = {:#010x}'.format(crc))

Изменено в версии 3.0: Результат всегда беззнаковый.

binascii.b2a_hex(data[, sep[, bytes_per_sep=1]])
binascii.hexlify(data[, sep[, bytes_per_sep=1]])

Возвращает шестнадцатеричное представление двоичных данных data. Каждый байт data преобразуется в соответствующее двузначное шестнадцатеричное представление. Поэтому возвращаемый объект bytes в два раза длиннее data.

Аналогичная функциональность (но возвращающая текстовую строку) также удобно доступна с помощью метода bytes.hex().

Если указан sep, он должен быть строкой из одного символа или объектом bytes. Он будет вставляться в вывод после каждых bytes_per_sep входных байтов. По умолчанию разделитель вставляется с правого конца вывода; если нужно считать слева, укажите отрицательное значение bytes_per_sep.

>>> import binascii
>>> binascii.b2a_hex(b'\xb9\x01\xef')
b'b901ef'
>>> binascii.hexlify(b'\xb9\x01\xef', '-')
b'b9-01-ef'
>>> binascii.b2a_hex(b'\xb9\x01\xef', b'_', 2)
b'b9_01ef'
>>> binascii.b2a_hex(b'\xb9\x01\xef', b' ', -2)
b'b901 ef'

Изменено в версии 3.8: Добавлены параметры sep и bytes_per_sep.

binascii.a2b_hex(hexstr)
binascii.unhexlify(hexstr)

Возвращает двоичные данные, представленные шестнадцатеричной строкой hexstr. Эта функция является обратной к b2a_hex(). hexstr должна содержать чётное количество шестнадцатеричных цифр (может быть в верхнем или нижнем регистре), в противном случае вызывается исключение Error.

Аналогичная функциональность (но более лояльная к пробельным символам) также доступна с помощью метода класса bytes.fromhex().

exception binascii.Error

Исключение, вызываемое при ошибках. Обычно это ошибки программирования.

exception binascii.Incomplete

Исключение, вызываемое при неполных данных. Обычно это не ошибки программирования, но их можно обработать, прочитав ещё немного данных и повторив попытку.

См. также

Модуль base64

Поддержка кодирования в стиле base64, соответствующего RFC, для оснований 16, 32, 64 и 85.

Модуль quopri

Поддержка quoted-printable кодирования, используемого в MIME-сообщениях электронной почты.