2015-06-25 22 views
44

BenPython 3 bayt dizesi değişkenini normal bir dizeye nasıl dönüştürebilirim? Benim değişken adından da anlaşılacağı gibi

bytes_string=part.get_payload(decode=False) 

yükü, bir bayt dizesi olarak geliyor bir XML e-posta ekindeki okudum.

Bu dizeyi, kullanabileceğim kullanılabilir bir dizeye dönüştürmek için önerilen Python 3 yaklaşımını kullanmaya çalışıyorum.

örnek gösterilmektedir:

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

nasıl bytes_string benim değişken için b (bayt) anahtar kelime argüman geçerli ve tavsiye edilen yaklaşımı kullanabilirsiniz?

Ben çalışmıyor çalıştı yolu: Bir bytes örneğinde

str(bbytes_string, 'utf-8') 

cevap

90

Neredeyse sağ son satırında vardı. bytes_string tipi bytes, b'abc' türü ile aynıdır çünkü

str(bytes_string, 'utf-8') 

istiyorum.

31

Çağrı decode() o kodlar metni alır.

str = bytes.decode() 
+3

UnicodeDecodeError: 'utf-8' kodek, bayt 0xf6'yı 230 konumunda çözemez: geçersiz başlangıç ​​bayt –

+1

@JuhaUntinen kodlamanız muhtemelen utf-8 değil. –

+0

Diziden UTF8 olmayan charachers filtreleme (atlama) nasıl yapılır? –

4

GÜNCELLEME:

TO NOT HAVE ANY b and quotes at first and end

'utf-8' kodlama tanınmayan karakterler olabilir kodunuzu, herhangi bir ek parametreler olmadan sadece str kullanmak daha iyidir gibi:

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

eklerseniz Bu özel baytlara 'utf-8' parametresi, hata almalısınız.

PYTHON 3 standardı dediği gibi, text şimdi utf-8'de endişe olmadan olurdu.

+0

sonucu "b '\\ x02 - \\ xdfI #)' dir" bu muhtemelen –

+0

@ GlenThompson'un istediği şey değil, sadece bu istenmeyen durumlar için bir örnektir. Bu metni özellikle bilerek kullanıyorum. Eğer metnin ilkinde bir “b” harfi varsa, o zaman ben –

+0

cevabını güncelledim, çok teşekkürler çünkü kodlamadan ve karakterleri kaybetmeden ansi karakterine sahip bir dizenin b '' sini kaldırmak için bir yol arıyorum. python'da yeniyim ve bilmiyorum bir diziyi baştan başlayıp indeksleri kullanmaya başlayabilirim: O –

İlgili konular