我有一些使用utf-8編碼將文本編碼為位元組的文本。在處理此文本時,我不小心將str()其設為 Unicode 字串,因為我認為這會自動使用正確的編碼解碼位元組物件。然而,事實并非如此。例如:
a = "?????"
a_bytes = a.encode(encoding="utf-8")
b = str(a_bytes)
產量
b = "b'\\xd8\\xb9\\xd8\\xac\\xd8\\xa7\\xd8\\xa6\\xd8\\xa8'"
這不是我所期望的。根據檔案
如果既沒有給出編碼也沒有給出錯誤,str(object) 回傳
type(object).__str__(object), [...]。
所以我的問題是:Python 中位元組物件的實作字串表示形式是什么,我通常可以從中重新創建我的原始 Unicode 字串嗎?
uj5u.com熱心網友回復:
它為您提供了一個包含位元組物件的字串表示形式的字串:
>>> a = "?????"
>>> a_bytes = a.encode(encoding="utf-8")
>>> a_bytes
b'\xd8\xb9\xd8\xac\xd8\xa7\xd8\xa6\xd8\xa8'
>>> str(a_bytes)
"b'\\xd8\\xb9\\xd8\\xac\\xd8\\xa7\\xd8\\xa6\\xd8\\xa8'"
意思是,您有一個表示 a的有效文字bytes。您可以將該文字再次決議為實際bytesusing ast.literal_eval:
>>> import ast
>>> ast.literal_eval(str(a_bytes))
b'\xd8\xb9\xd8\xac\xd8\xa7\xd8\xa6\xd8\xa8'
這又與a_bytes. str您可以使用.decode或使用以下encoding引數將它們正確解碼為 a str:
>>> str(a_bytes, 'utf-8')
'?????'
>>> a_bytes.decode('utf-8')
'?????'
uj5u.com熱心網友回復:
當您呼叫str()并將其作為引數傳遞給位元組變數時,它將從位元組轉換為字串。如果要從utf-8位元組解碼為原始字串,則需要使用decode()函式并指定初始編碼方法:
a = "?????"
a_bytes = a.encode(encoding="utf-8")
b = str(a_bytes)
print(b)
print(a_bytes)
print(a_bytes.decode("utf-8")) #Prints decoded string from bytes
輸出:
b'\xd8\xb9\xd8\xac\xd8\xa7\xd8\xa6\xd8\xa8'
b'\xd8\xb9\xd8\xac\xd8\xa7\xd8\xa6\xd8\xa8'
?????
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/494628.html
