binascii — Convert between binary and ASCII


The binascii module contains a number of methods to convert between binary and various ASCII-encoded binary representations. Normally, you will not use these functions directly but use wrapper modules like base64 instead. The binascii module contains low-level functions written in C for greater speed that are used by the higher-level modules.

Примітка

Функції a2b_* приймають рядки Unicode, що містять лише символи ASCII. Інші функції приймають лише байтоподібні об’єкти (такі як bytes, bytearray та інші об’єкти, які підтримують протокол буфера).

Змінено в версії 3.3: Функції a2b_* тепер приймають рядки Unicode тільки ASCII.

Модуль binascii визначає такі функції:

binascii.a2b_uu(string)

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

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

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

Змінено в версії 3.7: Додано параметр backtick.

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

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

If strict_mode is true, only valid base64 data will be converted. Invalid base64 data will raise binascii.Error.

Valid base64:

  • Conforms to RFC 3548.

  • Contains only characters from the base64 alphabet.

  • Contains no excess data after padding (including excess padding, newlines, etc.).

  • Does not start with a padding.

Змінено в версії 3.11: Added the strict_mode parameter.

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

Перетворення двійкових даних у рядок символів ASCII у кодуванні base64. Поверненим значенням є перетворений рядок, включаючи символ нового рядка, якщо новий рядок має значення 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 присутній і вірний, усі символи табуляції та пробіли будуть закодовані. Якщо необов’язковий аргумент istext присутній і має значення true, нові рядки не кодуються, але кінцеві пробіли кодуються. Якщо необов’язковий аргумент header присутній і відповідає дійсності, пробіли будуть закодовані як підкреслення відповідно до 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-бітну контрольну суму даних, починаючи з початкового CRC значення. Початковий 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: The result is always unsigned.

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

Повертає шістнадцяткове представлення двійкових даних. Кожен байт даних перетворюється у відповідне 2-значне шістнадцяткове представлення. Тому повернутий об’єкт bytes вдвічі довший за довжину data.

Подібні функції (але повернення текстового рядка) також зручно доступні за допомогою методу 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 у базових 16, 32, 64 та 85.

Модуль quopri

Підтримка кодування для друку в лапках, що використовується в електронних повідомленнях MIME.