我正在從一個包含位元組資料的檔案中讀取,但是當我打開檔案并將 readline 資料存盤到一個變數中時,它會將它存盤在一個帶有反斜杠轉義的字串中,所以當我嘗試解碼該資料時,我得到的是確切的字串資料而不是實際上解碼。
檔案示例:
b'\xe0\xa8\xaa\xe0\xa9\xb0\xe0\xa8\x9c\xe0\xa8\xbe\xe0\xa8\xac\xe0\xa9\x80'
b'\xd9\xbe\xd9\x86\xd8\xac\xd8\xa7\xd8\xa8\xdb\x8c'
b'\xd9\xbe\xda\x9a\xd8\xaa\xd9\x88'
readline 回傳:
"b'\\xe0\\xa8\\xaa\\xe0\\xa9\\xb0\\xe0\\xa8\\x9c\\xe0\\xa8\\xbe\\xe0\\xa8\\xac\\xe0\\xa9\\x80'"
我明白為什么會有一個額外的反斜杠,但我不知道如何洗掉它或在沒有它的情況下讀取檔案。
我試圖替換那些雙反斜杠,但這會引發 EOL 錯誤。
uj5u.com熱心網友回復:
要將bytes物件的字串表示形式轉換為實際bytes物件,您可以使用ast.literal_eval().
>>> s = "b'\\xe0\\xa8\\xaa'"
>>> import ast
>>> b = ast.literal_eval(s)
>>> b
b'\xe0\xa8\xaa'
>>> b.decode('utf-8')
'?'
雖然,為什么該檔案首先包含bytes物件的Python 表示?比如,它來自哪里?如果您是創建它的人,為什么不使用位元組本身呢?或者您至少可以使用像 JSON 這樣的標準序列化格式。
請注意,如果檔案來源不受信任并且您使用此方法,則攻擊者可能會使您的 Python 解釋器崩潰。
uj5u.com熱心網友回復:
如果您在檔案上使用 'rb' 模式,那可能就是問題所在。它仍然只是一個文本檔案。
當我不使用模式引數時,我得到:
"b'\xe0\xa8\xaa\xe0\xa9\xb0\xe0\xa8\x9c\xe0\xa8\xbe\xe0\xa8\xac\xe0\xa9\x80'
"
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/334524.html
