b
Prefiks oznacza się bytes
ciągiem znaków .
Jeśli widzisz, że jest używany w kodzie źródłowym Python 3, wyrażenie tworzy bytes
obiekt , a nie zwykły obiekt Unicodestr
. Jeśli zobaczysz, że odbija się to echem w Twojej powłoce Pythona lub jako część listy, dyktu lub innej zawartości kontenera, to zobaczysz bytes
obiekt reprezentowany za pomocą tej notacji.
bytes
obiekty zasadniczo zawierają sekwencję liczb całkowitych z zakresu 0-255, ale gdy są reprezentowane, Python wyświetla te bajty jako punkty kodowe ASCII, aby ułatwić odczytanie ich zawartości. Wszelkie bajtów poza druku zakresu znaków ASCII przedstawiono jako sekwencje (na przykład \n
, \x82
i inne). I odwrotnie, do definiowania wartości bajtów można używać zarówno znaków ASCII, jak i sekwencji sterujących; dla wartości ASCII używana jest ich wartość liczbowa (np. b'A'
== b'\x41'
)
Ponieważ bytes
obiekt składa się z sekwencji liczb całkowitych, możesz skonstruować bytes
obiekt z dowolnej innej sekwencji liczb całkowitych o wartościach z zakresu 0-255, takich jak lista:
bytes([72, 101, 108, 108, 111])
a indeksowanie zwraca liczby całkowite (ale wycinanie daje nową bytes
wartość; w powyższym przykładzie value[0]
daje 72
, ale value[:1]
wynosi b'H'
72 to punkt kodowy ASCII dla dużej litery H ).
bytes
modelować dane binarne , w tym zakodowany tekst . Jeśli twoja bytes
wartość zawiera tekst, musisz go najpierw zdekodować, używając odpowiedniego kodeka. Jeśli na przykład dane są zakodowane w formacie UTF-8, można uzyskać str
wartość Unicode za pomocą:
strvalue = bytesvalue.decode('utf-8')
I odwrotnie, aby przejść od tekstu w str
obiekcie do bytes
kodu, należy go zakodować . Musisz zdecydować, jakiego kodowania użyć; Domyślnie używa się UTF-8, ale to, czego będziesz potrzebować, zależy w dużym stopniu od twojego przypadku użycia:
bytesvalue = strvalue.encode('utf-8')
Możesz również użyć konstruktora, bytes(strvalue, encoding)
aby zrobić to samo.
Obie metody dekodowania i kodowania pobierają dodatkowy argument, aby określić, jak powinny być obsługiwane błędy .
Python 2, wersje 2.6 i 2.7 obsługują również tworzenie literałów ciągów przy użyciu b'..'
składni literałów łańcuchowych, aby ułatwić kod, który działa zarówno w Pythonie 2, jak i 3.
bytes
obiekty są niezmienne, podobnie jak str
łańcuchy. Użyj bytearray()
obiektu, jeśli potrzebujesz mutowalnej wartości bajtów.