Il b
prefisso indica una bytes
stringa letterale .
Se lo vedi usato nel codice sorgente di Python 3, l'espressione crea un bytes
oggetto , non un normale oggetto Unicodestr
. Se lo vedi echeggiare nella tua shell Python o come parte di un elenco, dict o altri contenuti del contenitore, allora vedi un bytes
oggetto rappresentato usando questa notazione.
bytes
gli oggetti fondamentalmente contengono una sequenza di numeri interi nell'intervallo 0-255, ma quando rappresentati, Python visualizza questi byte come punti di codice ASCII per facilitare la lettura del loro contenuto. I byte di fuori della stampabile gamma di caratteri ASCII vengono mostrati come sequenze di escape (ad esempio \n
, \x82
ecc). Al contrario, è possibile utilizzare sia caratteri ASCII che sequenze di escape per definire i valori dei byte; per i valori ASCII viene utilizzato il loro valore numerico (es b'A'
== b'\x41'
)
Poiché un bytes
oggetto è costituito da una sequenza di numeri interi, puoi costruire un bytes
oggetto da qualsiasi altra sequenza di numeri interi con valori compresi tra 0 e 255, come un elenco:
bytes([72, 101, 108, 108, 111])
e l'indicizzazione ti restituisce i numeri interi (ma l'affettatura produce un nuovo bytes
valore; per l'esempio sopra, value[0]
ti dà 72
, ma value[:1]
è b'H'
come 72 è il punto di codice ASCII per la lettera maiuscola H ).
bytes
modellare i dati binari , compreso il testo codificato . Se il tuo bytes
valore contiene testo, devi prima decodificarlo, utilizzando il codec corretto. Se i dati sono codificati come UTF-8, ad esempio, puoi ottenere un str
valore Unicode con:
strvalue = bytesvalue.decode('utf-8')
Al contrario, per passare dal testo in un str
oggetto a bytes
è necessario codificare . Devi decidere una codifica da utilizzare; l'impostazione predefinita è utilizzare UTF-8, ma ciò di cui avrai bisogno dipende in gran parte dal tuo caso d'uso:
bytesvalue = strvalue.encode('utf-8')
Puoi anche usare il costruttore, bytes(strvalue, encoding)
per fare lo stesso.
Entrambi i metodi di decodifica e codifica richiedono un argomento aggiuntivo per specificare come devono essere gestiti gli errori .
Python 2, le versioni 2.6 e 2.7 supportano anche la creazione di stringhe letterali usando b'..'
la sintassi di string literal, per semplificare il codice che funziona sia su Python 2 che su 3.
bytes
gli oggetti sono immutabili, proprio come le str
stringhe. Usa un bytearray()
oggetto se devi avere un valore di byte modificabili.