binascii — Преобразование между двоичным и ASCII-кодами


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

Примечание

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

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

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

binascii.a2b_uu(string)

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

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

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

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

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

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

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

Допустимый базовый уровень 64:

  • Соответствует RFC 3548.

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

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

  • Не начинается с отступа.

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

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

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

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

binascii.a2b_qp(data, header=False)

Преобразуйте блок данных, выводимых в кавычках, обратно в двоичный формат и верните двоичные данные. Одновременно может передаваться более одной строки. Если необязательный аргумент header присутствует и имеет значение true, символы подчеркивания будут расшифрованы как пробелы.

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

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

binascii.crc_hqx(data, value)

Вычислите 16-разрядное значение CRC для data, начиная с value в качестве исходного CRC, и верните результат. При этом используется многочлен CRC-CCITT x16 + x12 + * x*:sup:5 + 1,, часто представляемый как 0x1021. Этот CRC используется в формате binhex4.

binascii.crc32(data[, value])

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

print(binascii.crc32(b"hello world"))
# Or, in two pieces:
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]])

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

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

Если указан sep, то это должен быть односимвольный объект str или 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

Поддержка RFC-совместимого кодирования в стиле base64 в версиях base 16, 32, 64 и 85.

Модуль uu

Поддержка кодировки UU, используемой в Unix.

Модуль quopri

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

Вернуться на верх