b
Префікс позначає bytes
строковий літерал .
Якщо ви бачите, що він використовується у вихідному коді Python 3, вираз створює bytes
об'єкт , а не звичайний об’єкт Unicodestr
. Якщо ви бачите, що це лунає у вашій оболонці Python або як частина списку, дикту або іншого вмісту контейнера, ви бачите bytes
об’єкт, представлений за допомогою цієї позначення.
bytes
Об'єкти в основному містять послідовність цілих чисел у діапазоні 0-255, але при їх представленні Python відображає ці байти як точки коду ASCII, щоб полегшити зчитування їх вмісту. Будь-які байти за межами друку діапазону ASCII символів відображаються в вигляді керуючих послідовностей (наприклад \n
, \x82
і т.д.). І навпаки, ви можете використовувати як символи ASCII, так і послідовності виходу для визначення значень байтів; для значень ASCII використовується їх числове значення (наприклад, b'A'
== b'\x41'
)
Оскільки bytes
об'єкт складається з послідовності цілих чисел, ви можете побудувати bytes
об'єкт з будь-якої іншої послідовності цілих чисел зі значеннями в діапазоні 0-255, як список:
bytes([72, 101, 108, 108, 111])
і індексація дає вам назад цілі числа (але нарізка виробляє нове bytes
значення, для наведеного вище прикладу, value[0]
дає вам 72
, але value[:1]
це , b'H'
як 72 є точкою ASCII код букви H ).
bytes
модель двійкових даних , включаючи закодований текст . Якщо ваше bytes
значення містить текст, вам потрібно спершу розшифрувати його, використовуючи правильний кодек. Якщо, наприклад, дані кодуються як UTF-8, ви можете отримати str
значення Unicode за допомогою:
strvalue = bytesvalue.decode('utf-8')
І навпаки, щоб перейти від тексту в str
об'єкті до bytes
вас потрібно кодувати . Вам потрібно визначитися з кодуванням; за замовчуванням - використовувати UTF-8, але те, що вам знадобиться, сильно залежить від вашого випадку використання:
bytesvalue = strvalue.encode('utf-8')
Ви можете також використовувати конструктор, bytes(strvalue, encoding)
щоб зробити те ж саме.
Як методи декодування, так і кодування беруть додатковий аргумент, щоб вказати, як слід обробляти помилки .
Python 2, версії 2.6 та 2.7 також підтримують створення рядкових літералів, використовуючи b'..'
синтаксис рядкових літералів , щоб полегшити код, який працює і на Python 2 і 3.
bytes
об'єкти незмінні, як і str
рядки. Використовуйте bytearray()
об'єкт, якщо вам потрібно мати значення змінних байтів.