2013-07-12 18 views
106

Per esempio, ho una stringa come questa (valore di ritorno di subprocess.check_output):Come convertire 'stringa binaria' in stringa normale in Python3?

>>> b'a string' 
b'a string' 

Qualunque cosa ho fatto ad esso, è sempre stampate con la fastidiosa b' prima della stringa:

>>> print(b'a string') 
b'a string' 
>>> print(str(b'a string')) 
b'a string' 

Qualcuno ha qualche idea su come usarlo come una normale stringa o convertirlo in una stringa normale?

risposta

150

Decodificarlo.

>>> b'a string'.decode('ascii') 
'a string' 

Per ottenere byte da stringa, codificarlo.

>>> 'a string'.encode('ascii') 
b'a string' 
+4

persone usano ancora ascii nel 2015 ??? – lyomi

+8

@lyomi, ho usato 'ascii' perché la stringa data è stata creata con lettere ascii. Non è necessario specificare la codifica se la codifica è 'utf-8' (default in Python 3.x in base a' str.encode', 'byte.decode' doc-string) – falsetru

+2

@lyomi Nel 2016 (ed è quasi Alla fine) le persone usano ancora ascii. Ci sono molti molti prodotti e sistemi "legacy" (comprese le specifiche), ma ci sono anche molti motivi per cui potresti creare una "stringa binaria" in cui non vuoi unicode o qualcosa per provare a "unire" più byte in un singolo personaggio. Spesso usiamo "stringhe" per contenere dati binari, ad esempio per fare richieste DNS ecc. – Jmons

25

Se la risposta da falsetru non ha funzionato si potrebbe anche provare:

>>> b'a string'.decode('utf-8') 
'a string' 
Problemi correlati