2015-06-25 15 views
44

Czytałem w załącznik poczty elektronicznej XML zJak przekonwertować zmienną ciągów znaków w języku Python 3 na zwykły ciąg znaków?

bytes_string=part.get_payload(decode=False) 

Ładunek przychodzi w postaci ciągu bajtów, jak moja zmienna nazwa wskazuje.

Próbuję użyć zalecanego podejścia Python 3, aby przekształcić ten ciąg w użyteczny ciąg, który można modyfikować.

Przykład pokazuje:

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

Jak mogę zastosować b (bajty) argument słów kluczowych, aby moja zmienna bytes_string i używać zalecanego podejścia?

Sposób Próbowałem nie działa:

str(bbytes_string, 'utf-8') 

Odpowiedz

90

Miałeś go prawie w prawo w ostatnim wierszu. Chcesz

str(bytes_string, 'utf-8') 

ponieważ typ bytes_string jest bytes, taki sam, jak typ b'abc'.

31

decode() Zaproszenie na przykład bytes uzyskać tekst który koduje.

str = bytes.decode() 
+3

UnicodeDecodeError: Kodek "utf-8" nie może dekodować bajtu 0xf6 w pozycji 230: niepoprawny bajt początkowy –

+1

@JuhaUntinowanie kodowania prawdopodobnie nie jest utf-8. –

+0

Jak filtrować (pomijać) serowniki non-UTF8 z tablicy? –

4

AKTUALIZACJA:

TO NOT HAVE ANY b and quotes at first and end

jak kod może mieć nierozpoznawalne znaków do kodowania 'utf-8', lepiej używać tylko Str bez żadnych dodatkowych parametrów:

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

jeśli dodać 'utf-8' parametr, do tych konkretnych bajtów, powinieneś otrzymać błąd.

Zgodnie ze standardem PYTHON 3, text będzie teraz w utf-8 bez obaw.

+0

wynikiem jest "b" \\ x02 - \\ xdfI #) "", co prawdopodobnie nie jest tym, czego chce –

+0

@GlenThompson to tylko przykład niechcianych warunków, które mogą się zdarzyć. Używam tego konkretnego tekstu celowo. Jeśli masz na myśli tekst "b" w pierwszej, to zaktualizowałem odpowiedź –

+0

, więc bardzo dziękuję, szukam sposobu na usunięcie b '' ciągu znaków, które mają znak ansi bez kodowania i utraty znaków, i "Jestem nowy w Pythonie i nie wiem, czy mogę zmniejszyć tablicę od początku i na początku używając indeksów: O –