Il modo migliore per convertire stringhe in byte in Python 3?
Sembra che ci siano due modi diversi per convertire una stringa in byte, come si vede nelle risposte a https://stackoverflow.com/questions/5471158/typeerror-str-does-not-support-the-buffer-interface
Quale di questi metodi sarebbe migliore o più pitonico? O è solo una questione di preferenze personali?
b = bytes(mystring, 'utf-8')
b = mystring.encode('utf-8')
718
3
Se guardate la documentazione per
bytes
, vi indicabytearray
:bytearray([source[, encoding[, errors]])
restituisce un nuovo array di byte. Il tipo bytearray è una sequenza mutabile di interi nell'intervallo 0 <= x < 256. Ha la maggior parte dei metodi usuali delle sequenze mutabili, descritti in Tipi di sequenze mutabili, così come la maggior parte dei metodi che ha il tipo bytes, vedi Bytes e metodi per array di byte.
Il parametro sorgente opzionale può essere usato per inizializzare l'array in alcuni modi diversi:
Se è una stringa, dovete dare anche i parametri di codifica (e, opzionalmente, gli errori); bytearray() converte quindi la stringa in byte usando str.encode().
Se è un intero, l'array avrà quella dimensione e sarà inizializzato con byte nulli.__
_gt;Se è un oggetto conforme all'interfaccia buffer, un buffer di sola lettura dell'oggetto sarà usato per inizializzare l'array di bytes.
_gt;__Se è un iterabile, deve essere un iterabile di interi nell'intervallo 0
È più facile di quanto si pensi:
Il modo assolutamente migliore non è nessuno dei 2, ma il 3°. Il primo parametro di
encode
default to'utf-8'
fin da Python 3.0. Quindi il modo migliore èQuesto sarà anche più veloce, perché l'argomento di default non risulta nella stringa
"utf-8"
nel codice C, maNULL
, che è molto più veloce da controllare!Ecco alcuni tempi:
Nonostante l'avvertimento i tempi erano molto stabili dopo ripetute esecuzioni - la deviazione era solo ~2 per cento.
Usare
encode()
senza un argomento non è compatibile con Python 2, poiché in Python 2 la codifica dei caratteri di default è ASCII.