Префикс b
означает bytes
строковый литерал .
Если вы видите, что он используется в исходном коде Python 3, выражение создает объект bytes
, не обычный Юникод str
объект .Если вы видите, что это отражено в вашей оболочке Python или как часть списка, dict или другого содержимого контейнера, то вы видите объект bytes
, представленный с помощью этой записи.
bytes
объекты в основном содержат последовательностьцелые числа в диапазоне 0-255, но когда они представлены, Python отображает эти байты в виде кодовых точек ASCII, чтобы было проще читать их содержимое.Любые байты вне диапазона печатаемых символов ASCII отображаются как escape-последовательности (например, \n
, \x82
и т. Д.).И наоборот, вы можете использовать как символы ASCII, так и escape-последовательности для определения значений байтов;для значений ASCII используется их числовое значение (например, b'A'
== b'\x41'
)
Поскольку объект bytes
состоит из последовательности целых чисел, вы можете создать объект bytes
из любой другой последовательностицелых чисел со значениями в диапазоне 0-255, например, в виде списка:
bytes([72, 101, 108, 108, 111])
, а индексирование возвращает целые числа (но при нарезке получается новое значение bytes
; для приведенного выше примера value[1]
дает 101
, но value[:1]
- это b'H'
, поскольку 72 - это кодовая точка ASCII для заглавной буквы H ).
bytes
модель двоичные данные , включая кодированный текст .Если ваше значение bytes
содержит текст, вам необходимо сначала декодировать его, используя правильный кодек.Если данные закодированы как UTF-8, например, вы можете получить значение Unicode str
с помощью:
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()
объект , если вам нужно значение изменяемого байта.