我正在更新一些別人寫的Python2代碼,這部分:
我正在更新一些別人寫的Python2代碼。
def exec(self, content, query)。
# query = "city_68"。
content = content.strip().strip(',').decode('utf-8', 'noore')
query = query.decode('utf-8'/span>, 'ignore')
query_list = query.split('|')
這在Python3中給出了一個錯誤:
檔案"/Users/cong/bexec.py",行708,在bexec
content = content.strip().strip(',').decode('utf-8', ' ignore')
AttributeError: 'str' object沒有屬性'decode'。
引數content和query都是字串。所以我洗掉了解碼的部分:
content = content.strip().strip(', ')
# query = query.decode('utf-8', 'ignore')
現在它沒有再抱怨了。這樣做安全嗎?我想在Python3中,它不再需要解碼()了。
uj5u.com熱心網友回復:
正確。在 Python 3 中,如果你有一個 str 值,你可以認為它是一個適當的 Unicode 碼位序列,而不是一個需要從 (比如) UTF-8 解碼為 Unicode 字串的位元組序列。如果你有一個bytes值,你必須先對它進行解碼,以便得到一個合適的 Unicode 字串。
在 Python 2 中,界限更加寬松。一個 unicode 值肯定是一個合適的 Unicode 字串 (在 Python 3 中被重新命名為 str),而一個 str 值可能是一個 "真正的 "純 ASCII 字串值或任意二進制資料:你不能僅僅從型別上判斷。
因此,str型別支持encode和decode方法,以允許在str型別的兩面之間切換。
在Python 3中,通過更嚴格的角色定義,你可以呼叫str.encode來獲得一個bytes值,或者你可以呼叫bytes.decode來獲得一個str值。您不能對str進行解碼或對bytes進一步編碼。str.decode和bytes.encode根本不存在。
在某種意義上,所有的檔案都是二進制檔案:它們由一個位元組流組成。我們所說的文本檔案只是一個檔案,其位元組旨在使用特定的文本解碼器進行解碼,如ASCII或UTF-8,而不是像JPEG解碼器,或JVM,或你的CPU本身。
當您使用 open 在文本模式下打開一個檔案時(默認),它的 read 方法回傳 str 值,這是應用檔案物件的解碼器從檔案中讀取原始位元組的結果。
當您使用 open 在二進制模式下打開一個檔案時,它的 read 方法回傳 bytes 值,原始位元組被留在未解碼的地方,您可以根據您的需要進行處理。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/309357.html
標籤:
下一篇:用GetX通過引數發送資料
