Una delle sequenze built-in meno conosciute in Python è bytes, una sequenza immutabile di interi. Ogni intero rappresenta un byte di dati. I dati vengono spesso trasmessi su reti e tra programmi come byte. I byte non sono leggibili dall'uomo e spesso dobbiamo convertirli in stringhe nei nostri programmi Python.
Questo tutorial esplora le tecniche per convertire byte in stringhe in Python. Se ti interessa l'operazione inversa, dai un'occhiata al mio tutorial su come convertire stringhe in byte in Python.
Cominciamo con una risposta breve per chi va di fretta.
Risposta breve: come convertire byte in stringa in Python
Lo strumento principale per convertire byte in stringhe in Python è il metodo .decode():
data =b"\xc3\xa9clair"
text = data.decode(encoding="utf-8")print(text)Offerto da
Il metodo .decode() restituisce una stringa che rappresenta l'oggetto bytes. In questo esempio si usa la decodifica UTF-8. UTF-8 è la codifica predefinita, quindi non è necessaria nell'esempio sopra, ma possiamo usare anche altre codifiche.
Capire byte e stringhe in Python
Python ha una struttura dati built-in bytes, che è una sequenza immutabile di interi nel range 0–255. Un intero all'interno di questo intervallo di 256 numeri può essere rappresentato usando otto bit di dati, equivalenti a un byte. Pertanto, ciascun elemento in un oggetto bytes è un intero che rappresenta un byte.
Usiamo il costruttore bytes() per creare un oggetto bytes da una lista:
data =bytes([68,97,116,97,67,97,109,112])print(type(data))Offerto da
Traceback (most recent call last):
...
data[0] = 100
~~~~^^^
TypeError: 'bytes' object does not support item assignmentOfferto da
Python genera un TypeError quando proviamo a cambiare un valore all'interno di questa sequenza. Confermiamo che un oggetto bytes può contenere solo interi nell'intervallo da 0 a 255:
Traceback (most recent call last):
...
data = bytes([254, 255, 256])
^^^^^^^^^^^^^^^^^^^^^^
ValueError: bytes must be in range(0, 256)Offerto da
Il ValueError indica che un intero che rappresenta un byte deve appartenere a range(0, 256). La fine dell'intervallo è esclusa, come da convenzione per gli intervalli numerici in Python.
La rappresentazione mostra l'oggetto bytes tramite caratteri. Python visualizza gli interi usando i caratteri ASCII corrispondenti a quei valori. Il prefisso b davanti ai caratteri tra virgolette indica che si tratta di un oggetto bytes.
Possiamo anche creare un oggetto bytes usando direttamente il letterale bytes:
data =b"DataCamp"print(data)print(data[0])Offerto da
L'oggetto è visualizzato tramite caratteri, ma i suoi elementi sono interi.
Tuttavia, gli oggetti bytes sono leggibili dall'uomo solo quando si usano interi corrispondenti a caratteri ASCII stampabili. Poiché l'ASCII è una codifica a 7 bit, contiene 128 codici, ma solo 95 di questi caratteri ASCII sono stampabili.
Gli interi tra 0 e 127 che non hanno un carattere ASCII stampabile e gli interi tra 128 e 255 sono mostrati come numeri esadecimali:
data =bytes([0,68,97,116,97,67,97,109,112,200])print(data)Offerto da
Il primo intero nella lista è ora 0, che non è un carattere stampabile in ASCII. L'oggetto bytes mostra questo intero come \x00, la rappresentazione esadecimale di 0. L'ultimo intero è 200, che è fuori dal range ASCII ma all'interno dell'intervallo di interi utilizzabili nei byte. Python visualizza questo intero come \xc8, ovvero 200 in esadecimale.
Le strutture dati bytes e stringhe condividono caratteristiche comuni. Entrambe sono sequenze immutabili, ma bytes contiene interi, mentre le stringhe contengono caratteri:
data =bytes([68,97,116,97,67,97,109,112])print(data[0])
text ="DataCamp"print(text[0])Offerto da
I byte vengono usati per trasferire dati su reti e tra diverse interfacce. La prossima sezione di questo articolo esplora come convertire byte in stringhe.
Convertire byte in stringhe: il metodo .decode()
Un oggetto bytes in Python è leggibile dall'uomo solo quando contiene caratteri ASCII leggibili. Nella maggior parte delle applicazioni, questi caratteri non sono sufficienti. Possiamo convertire un oggetto bytes in una stringa usando il metodo .decode():
data =bytes([68,97,116,97,67,97,109,112])
text = data.decode()print(text)print(type(text))Offerto da
Tuttavia, esistono diverse codifiche per convertire tra byte e stringhe. Gli interi nell'esempio sopra rappresentano caratteri ASCII stampabili. Tuttavia, la codifica predefinita usata quando non si passa alcun argomento a .decode() è UTF-8, non ASCII. UTF-8 è la codifica più usata per i caratteri Unicode.
I primi 128 codici UTF-8 corrispondono ai codici ASCII, motivo per cui l'oggetto bytes data viene decodificato nella stringa "DataCamp" nell'esempio sopra.
Tuttavia, Unicode contiene quasi 150.000 caratteri. UTF-8 codifica tutti i caratteri non ASCII in Unicode usando due o più byte.
Creiamo un nuovo oggetto bytes e decodifichiamolo:
data =bytes([195,169])print(data)
text = data.decode()print(text)Offerto da
L'oggetto bytes contiene due byte: gli interi 195 e 169. Python mostra la rappresentazione esadecimale di questi byte. Tuttavia, .decode() restituisce una stringa decodificando l'oggetto bytes usando la codifica UTF-8. La coppia di byte b'\xc3\xa9' rappresenta la lettera e con accento acuto, é.
Il metodo .decode() accetta un argomento facoltativo per specificare la codifica:
UTF-8 è la codifica predefinita, ma si possono usare altre codifiche. Possiamo anche convertire una stringa in un oggetto bytes usando il metodo della stringa .encode() con varie codifiche:
text ="éclair"
data = text.encode("utf-8")print(data)
data = text.encode("utf-16")print(data)Offerto da
b'\xc3\xa9clair'
b'\xff\xfe\xe9\x00c\x00l\x00a\x00i\x00r\x00'Offerto da
La stessa stringa si converte in oggetti bytes diversi a seconda della codifica dei caratteri utilizzata.
Errori di codifica
La scelta delle codifiche dei caratteri può portare a errori se si usa una codifica diversa durante la conversione tra byte e stringhe. Usiamo l'esempio con la stringa "éclair" codificata in byte usando la codifica UTF-8:
text ="éclair"
data = text.encode("utf-8")print(data)Offerto da
Traceback (most recent call last):
...
text = data.decode("ascii")
^^^^^^^^^^^^^^^^^^^^
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)Offerto da
Tuttavia, possiamo includere l'argomento facoltativo errors per gestire eventuali errori. Il valore predefinito per il parametro errors è "strict", che solleva un errore per i caratteri non validi.
Il metodo .decode() può essere chiamato con errors="ignore" per ignorare tutti i caratteri non validi:
text = data.decode("ascii", errors="ignore")print(text)Offerto da
Questo output mostra che mancano dei caratteri nella stringa. La scelta della gestione degli errori dipende dall'applicazione.
Convertire byte in stringhe con str()
Il metodo .decode() è la via principale per convertire byte in stringhe. Tuttavia, è anche possibile usare direttamente il costruttore str(). Usare il costruttore str() su un oggetto bytes creerà una rappresentazione testuale dei byte grezzi:
data =b'\xc3\xa9clair'
text =str(data)print(text)print(type(text))Offerto da
Il modulo codecs della libreria standard di Python fornisce l'interfaccia per codificare e decodificare dati. Questo modulo fornisce anche una funzione .decode() che può essere usata per convertire byte di Python in stringhe:
import codecs
data =b'\xc3\xa9clair'
text = codecs.decode(data, encoding='utf-8')print(text)Offerto da
Queste tecniche di conversione alternative non sono metodi del tipo bytes, ma funzioni che richiedono di passare l'oggetto bytes come argomento.
Conclusione
I dati sono spesso trasferiti come byte e molte applicazioni Python devono convertire tra byte e stringhe. Un oggetto bytes è una sequenza immutabile di byte che può essere convertita in una string usando una delle diverse codifiche dei caratteri.
La via principale per convertire byte di Python in una stringa è il metodo .decode(), che permette di scegliere una codifica e una strategia di gestione degli errori.
Puoi proseguire il tuo apprendimento di Python con i seguenti tutorial e corsi:
Ho studiato Fisica e Matematica a livello UG presso l’Università di Malta. Poi mi sono trasferito a Londra e ho conseguito il dottorato in Fisica all’Imperial College. Ho lavorato su nuove tecniche ottiche per immagini della retina umana. Ora mi concentro sullo scrivere di Python, comunicare su Python e insegnare Python.
Scopri i 15 migliori server MCP remoti che stanno trasformando lo sviluppo AI nel 2026. Scopri come migliorano automazione, ragionamento, sicurezza e velocità dei workflow.
Una delle sequenze built-in meno conosciute in Python è bytes, una sequenza immutabile di interi. Ogni intero rappresenta un byte di dati. I dati vengono spesso trasmessi su reti e tra programmi come byte. I byte non sono leggibili dall'uomo e spesso dobbiamo convertirli in stringhe nei nostri programmi Python.
Questo tutorial esplora le tecniche per convertire byte in stringhe in Python. Se ti interessa l'operazione inversa, dai un'occhiata al mio tutorial su come convertire stringhe in byte in Python.
Cominciamo con una risposta breve per chi va di fretta.
Risposta breve: come convertire byte in stringa in Python
Lo strumento principale per convertire byte in stringhe in Python è il metodo
.decode():Il metodo
.decode()restituisce una stringa che rappresenta l'oggettobytes. In questo esempio si usa la decodifica UTF-8. UTF-8 è la codifica predefinita, quindi non è necessaria nell'esempio sopra, ma possiamo usare anche altre codifiche.Capire byte e stringhe in Python
Python ha una struttura dati built-in
bytes, che è una sequenza immutabile di interi nel range 0–255. Un intero all'interno di questo intervallo di 256 numeri può essere rappresentato usando otto bit di dati, equivalenti a un byte. Pertanto, ciascun elemento in un oggettobytesè un intero che rappresenta un byte.Usiamo il costruttore
bytes()per creare un oggettobytesda una lista:Questa sequenza di interi è immutabile:
Python genera un
TypeErrorquando proviamo a cambiare un valore all'interno di questa sequenza. Confermiamo che un oggettobytespuò contenere solo interi nell'intervallo da 0 a 255:Il
ValueErrorindica che un intero che rappresenta un byte deve appartenere arange(0, 256). La fine dell'intervallo è esclusa, come da convenzione per gli intervalli numerici in Python.Possiamo visualizzare l'oggetto bytes usando
print():La rappresentazione mostra l'oggetto
bytestramite caratteri. Python visualizza gli interi usando i caratteri ASCII corrispondenti a quei valori. Il prefisso b davanti ai caratteri tra virgolette indica che si tratta di un oggettobytes.Possiamo anche creare un oggetto
bytesusando direttamente il letterale bytes:L'oggetto è visualizzato tramite caratteri, ma i suoi elementi sono interi.
Tuttavia, gli oggetti
bytessono leggibili dall'uomo solo quando si usano interi corrispondenti a caratteri ASCII stampabili. Poiché l'ASCII è una codifica a 7 bit, contiene 128 codici, ma solo 95 di questi caratteri ASCII sono stampabili.Gli interi tra 0 e 127 che non hanno un carattere ASCII stampabile e gli interi tra 128 e 255 sono mostrati come numeri esadecimali:
Il primo intero nella lista è ora 0, che non è un carattere stampabile in ASCII. L'oggetto
bytesmostra questo intero come\x00, la rappresentazione esadecimale di 0. L'ultimo intero è 200, che è fuori dal range ASCII ma all'interno dell'intervallo di interi utilizzabili nei byte. Python visualizza questo intero come\xc8, ovvero 200 in esadecimale.Le strutture dati
bytese stringhe condividono caratteristiche comuni. Entrambe sono sequenze immutabili, mabytescontiene interi, mentre le stringhe contengono caratteri:I byte vengono usati per trasferire dati su reti e tra diverse interfacce. La prossima sezione di questo articolo esplora come convertire byte in stringhe.
Convertire byte in stringhe: il metodo
.decode()Un oggetto
bytesin Python è leggibile dall'uomo solo quando contiene caratteri ASCII leggibili. Nella maggior parte delle applicazioni, questi caratteri non sono sufficienti. Possiamo convertire un oggettobytesin una stringa usando il metodo.decode():Tuttavia, esistono diverse codifiche per convertire tra byte e stringhe. Gli interi nell'esempio sopra rappresentano caratteri ASCII stampabili. Tuttavia, la codifica predefinita usata quando non si passa alcun argomento a
.decode()è UTF-8, non ASCII. UTF-8 è la codifica più usata per i caratteri Unicode.I primi 128 codici UTF-8 corrispondono ai codici ASCII, motivo per cui l'oggetto bytes data viene decodificato nella stringa
"DataCamp"nell'esempio sopra.Tuttavia, Unicode contiene quasi 150.000 caratteri. UTF-8 codifica tutti i caratteri non ASCII in Unicode usando due o più byte.
Creiamo un nuovo oggetto
bytese decodifichiamolo:L'oggetto
bytescontiene due byte: gli interi 195 e 169. Python mostra la rappresentazione esadecimale di questi byte. Tuttavia,.decode()restituisce una stringa decodificando l'oggettobytesusando la codifica UTF-8. La coppia di byteb'\xc3\xa9'rappresenta la lettera e con accento acuto, é.Il metodo
.decode()accetta un argomento facoltativo per specificare la codifica:UTF-8 è la codifica predefinita, ma si possono usare altre codifiche. Possiamo anche convertire una stringa in un oggetto
bytesusando il metodo della stringa.encode()con varie codifiche:La stessa stringa si converte in oggetti
bytesdiversi a seconda della codifica dei caratteri utilizzata.Errori di codifica
La scelta delle codifiche dei caratteri può portare a errori se si usa una codifica diversa durante la conversione tra byte e stringhe. Usiamo l'esempio con la stringa
"éclair"codificata in byte usando la codifica UTF-8:Questa sequenza di byte rappresenta caratteri usando la codifica UTF-8. Il metodo
.decode()genera un errore se usiamo la codifica sbagliata:Tuttavia, possiamo includere l'argomento facoltativo
errorsper gestire eventuali errori. Il valore predefinito per il parametroerrorsè"strict", che solleva un errore per i caratteri non validi.Il metodo
.decode()può essere chiamato conerrors="ignore"per ignorare tutti i caratteri non validi:Il primo carattere nella stringa originale è é, che non è un carattere ASCII. Pertanto,
.decode()restituisce una stringa senza il primo carattere.Un'altra opzione è chiamare
.decode()conerrors="replace", che sostituisce i byte non validi con �:Questo output mostra che mancano dei caratteri nella stringa. La scelta della gestione degli errori dipende dall'applicazione.
Convertire byte in stringhe con
str()Il metodo
.decode()è la via principale per convertire byte in stringhe. Tuttavia, è anche possibile usare direttamente il costruttorestr(). Usare il costruttorestr()su un oggettobytescreerà una rappresentazione testuale dei byte grezzi:Tuttavia, il costruttore
str()accetta anche un argomentoencoding, che possiamo usare per creare una stringa basata su una specifica codifica:Convertire byte in stringhe con codecs.decode()
Il modulo
codecsdella libreria standard di Python fornisce l'interfaccia per codificare e decodificare dati. Questo modulo fornisce anche una funzione.decode()che può essere usata per convertire byte di Python in stringhe:Queste tecniche di conversione alternative non sono metodi del tipo
bytes, ma funzioni che richiedono di passare l'oggettobytescome argomento.Conclusione
I dati sono spesso trasferiti come byte e molte applicazioni Python devono convertire tra byte e stringhe. Un oggetto
bytesè una sequenza immutabile di byte che può essere convertita in unastringusando una delle diverse codifiche dei caratteri.La via principale per convertire byte di Python in una stringa è il metodo
.decode(), che permette di scegliere una codifica e una strategia di gestione degli errori.Puoi proseguire il tuo apprendimento di Python con i seguenti tutorial e corsi: