b
Префикс обозначает bytes
строковый литерал .
Если вы видите, что оно используется в исходном коде Python 3, выражение создает bytes
объект , а не обычный объект Unicodestr
. Если вы видите, что это отражено в вашей оболочке Python или как часть списка, dict или другого содержимого контейнера, то вы видите bytes
объект, представленный с использованием этой нотации.
bytes
объекты в основном содержат последовательность целых чисел в диапазоне 0–255, но при представлении Python отображает эти байты в виде кодовых точек ASCII, чтобы облегчить чтение их содержимого. Любые байты за пределами печатаемого диапазона символов ASCII отображаются как escape-последовательности (например \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, так и на Python 3.
bytes
объекты неизменяемы, как и str
строки. Используйте bytearray()
объект, если вам нужно иметь изменяемое значение байтов.