2015-06-25 16 views
44

ho letto in un allegato di posta elettronica XML conCome si converte una variabile a byte-stringa Python 3 in una stringa normale?

bytes_string=part.get_payload(decode=False) 

Il carico utile arriva come una stringa di byte, come suggerisce il mio nome di variabile.

Sto cercando di utilizzare l'approccio Python 3 consigliato per trasformare questa stringa in una stringa utilizzabile che posso manipolare.

L'esempio mostra:

str(b'abc','utf-8') 

Come posso applicare il b (byte) argomentazione parola chiave per la mia variabile bytes_string e utilizzare l'approccio raccomandato?

Il modo in cui ho provato non funziona:

str(bbytes_string, 'utf-8') 

risposta

90

Hai avuto quasi ragione nell'ultima riga. Si vuole

str(bytes_string, 'utf-8') 

perché il tipo di bytes_string è bytes, lo stesso del tipo di b'abc'.

31

chiamata decode() su un'istanza bytes per ottenere il testo che esso codifica.

str = bytes.decode() 
+3

UnicodeDecodeError: il codec 'utf-8' non può decodificare il byte 0xf6 in posizione 230: byte di avvio non valido –

+1

@JuhaUntinen probabilmente la codifica non è utf-8. –

+0

Come filtrare (saltare) charcher non UTF8 dall'array? –

4

aggiornamento:

TO NOT HAVE ANY b and quotes at first and end

il tuo codice può avere irriconoscibili caratteri per 'utf-8' codifica, è meglio usare solo str senza parametri aggiuntivi:

bad_bytes = b'\x02-\xdfI#)' 
text = str(bad_bytes)[2:-1] 

se si aggiunge Parametro 'utf-8', a questi byte specifici, si dovrebbe ricevere errore.

Come dice lo standard PYTHON 3, text sarebbe ora in utf-8 senza problemi.

+0

il risultato è "b '\\ x02 - \\ xdfI #)'" che probabilmente non è quello che vuole –

+0

@GlenThompson è solo un esempio di condizioni indesiderate, che possono accadere. Uso intenzionalmente questo testo specifico. Se intendi che il testo ha un 'b' in primo luogo, allora ho aggiornato la risposta –

+0

così molto grazie sto cercando un modo per rimuovere il b '' di una stringa che ha carattere ansi senza codifica e perdita dei caratteri, i Sono nuovo in Python e non so che posso ridurre un array dall'inizio e dall'inizio usando gli indici: O –

Problemi correlati