bPrefiks oznacza się bytesciągiem znaków .
Jeśli widzisz, że jest używany w kodzie źródłowym Python 3, wyrażenie tworzy bytesobiekt , 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 bytesobiekt reprezentowany za pomocą tej notacji.
bytesobiekty 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, \x82i 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ż bytesobiekt składa się z sekwencji liczb całkowitych, możesz skonstruować bytesobiekt 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ą byteswartość; 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 ).
bytesmodelować dane binarne , w tym zakodowany tekst . Jeśli twoja byteswartość 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ć strwartość Unicode za pomocą:
strvalue = bytesvalue.decode('utf-8')
I odwrotnie, aby przejść od tekstu w strobiekcie do byteskodu, 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.
bytesobiekty są niezmienne, podobnie jak strłańcuchy. Użyj bytearray()obiektu, jeśli potrzebujesz mutowalnej wartości bajtów.