2013-07-12 8 views
106

Na przykład, mam ciąg jak poniżej (wartość zwracana subprocess.check_output):Jak przekonwertować ciąg binarny na zwykły ciąg znaków w języku Python3?

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

Cokolwiek zrobiłam do niego, jest zawsze drukowana z irytujące b' przed wyrażenie:

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

Czy ktoś ma jakieś pomysły na temat używania go jako zwykły ciąg lub przekształcić go w normalny ciąg?

Odpowiedz

150

Dekoduj to.

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

Aby uzyskać bajty z łańcucha, należy je zakodować.

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

ludzie nadal używać ASCII w 2015 ??? – lyomi

+8

@lyomi, użyłem 'ascii', ponieważ podany ciąg został napisany z literami ASCII. Nie musisz określać kodowania, jeśli kodowanie to 'utf-8' (domyślnie w Pythonie 3.x zgodnie z' str.encode', 'bytes.decode' doc-string) – falsetru

+2

@lyomi W 2016 (i jego prawie koniec) ludzie nadal używają ascii. Istnieje wiele "starych" produktów i systemów (w tym specyfikacje), ale istnieje również wiele powodów, dla których możesz tworzyć "ciąg binarny", w którym nie chcesz unicode lub czegoś, co możesz spróbować "scalić" wiele bajtów w pojedyncza postać. Często używamy "ciągów" do przechowywania danych binarnych, na przykład do wysyłania żądań DNS, itp. – Jmons

25

Jeśli odpowiedź od falsetru nie działa można też spróbować:

>>> b'a string'.decode('utf-8') 
'a string' 
Powiązane problemy