2015-06-25 109 views
44

我與如何將Python 3字節字符串變量轉換爲常規字符串?

bytes_string=part.get_payload(decode=False) 

有效載荷來作爲一個字節串讀一個XML郵件附件,因爲我的變量名稱所暗示的。

我想使用推薦的Python 3方法將此字符串轉換爲可操縱的可用字符串。

的例子顯示:

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

如何申請的b(字節)關鍵字參數到我的變量bytes_string,使用推薦的方法呢?

我試圖不工作的方式:在bytes實例

str(bbytes_string, 'utf-8') 

回答

90

你在最後一行中已經接近了正確的位置。你想

str(bytes_string, 'utf-8') 

因爲bytes_string類型爲bytes,一樣的b'abc'類型。

31

呼叫decode()得到它編碼的文本。

str = bytes.decode() 
+3

UnicodeDecodeError:'utf-8'編解碼器無法解碼位置230中的字節0xf6:無效起始字節 –

+1

@JuhaUntinen您的編碼可能不是utf-8。 –

+0

如何從數組中過濾(跳過)非UTF8字符? –

4

更新:

TO NOT HAVE ANY b and quotes at first and end

當你的代碼可能有面目全非字符'utf-8'編碼, 最好是隻使用STR無需任何額外的參數:

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

如果添加'utf-8'參數,對於這些特定字節,您應該會收到錯誤。

正如PYTHON 3標準所說,text現在不在使用UTF-8。

+0

結果是「b'\\ x02 - \\ xdfI#)'」這可能不是他想要的 –

+0

@GlenThompson它只是一個可能發生的不想要的情況的例子。我故意使用這個特定的文本。如果你的意思是文本首先有一個'b',那麼我更新了答案 –

+0

所以非常感謝我正在尋找一種方法來刪除一個字符串的字符串,該字符串具有ansi字符而沒有編碼和丟失字符,我'新的蟒蛇,不知道我可以減少從開始和開始使用索引數組:O –