binascii — преобразования между двоичной и ASCII


Модуль binascii содержит ряд методов для конвертирования бинарных данных и двоичных представлений символов ASCII. Как правило, вы не будете использовать эти методы напрямую, но они используются в модулях обёртках, такие как uu, base64 или binhex. Модуль binascii содержит низкоуровневые функции, написанныйе на C для большей скорости и используются более высокоуровневыми модулями.

Примечание

Функции a2b_* принимают Юникод строки, содержащих только символы ASCII. Другие функции принимают только байтоподобные объекты (например, bytes, bytearray и другие объекты, которые поддерживают буферизацию протокола).

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

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

binascii.a2b_uu(string)

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

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

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

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

binascii.a2b_base64(string)

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

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.a2b_hqx(string)

Конвертировать binhex4 данные в формате ASCII в двоичные, без RLE-декомпрессии. В строке должны содержаться достаточное число двоичных байт, или (в случае последней порции данных binhex4) содержат оставшиеся биты нулевыми.

binascii.rledecode_hqx(data)

Выполнять RLE-декомпрессии данных, согласно стандарту binhex4. Алгоритм использует 0x90 после байта в качестве индикатора повторения с последующим подсётом. Счётчик 0 указывает значение байта 0x90. Процедура возвращает распакованные данные, если только входные данные не заканчиваются осиротевшим индикатором повтора, в этом случае возникает исключение Incomplete.

Изменено в версии 3.2: Принимаются только bytestring или объекты bytearray в качестве входных данных.

binascii.rlecode_hqx(data)

Проанализировать стиль binhex4 метода RLE-сжатия на data и возвратить результат.

binascii.b2a_hqx(data)

Выполнение hexbin4 двоичного-в-ASCII перевода и возвращая в результате строку. Аргумент должен быть RLE-закодированным и иметь длину кратную 3 (за исключением, возможно, последнего фрагмента).

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: Результат всегда беззнаковый. Чтобы производить такое же числовое значение во всех Python версиях и платформах, используйте crc32(data) & 0xffffffff.

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

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

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

Если указано sep, он должен быть единственным символом или объектом в байтах. Он будет вставлен в выходной после каждого 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
Поддержка соответствии с RFC в base64-стиль кодирования с основанием 16, 32, 64 и 85.
Модуль binhex
Поддержка формата binhex используемый Macintosh.
Модуль uu
Поддержки UU кодирование используемый Unix.
Модуль quopri
Поддержка кодировки quoted-printable, используемой в сообщениях электронной почты MIME.