Python 3 中的二進制與默認模式的含義是什么?當我嘗試打開以另一種模式保存的泡菜文件時,出現錯誤,而在 Python 2.7 中,我可以在模式之間切換而沒有任何問題。這個問題很容易解決,但為什么它首先重要?一般來說:為了更大的便攜性,應該首選哪種模式?是否存在首選模式的特定場景(例如處理純文本文件等)?二進制/默認模式對 UTF-8 等編碼有什么影響?
1 回答

白衣非少年
TA貢獻1155條經驗 獲得超0個贊
從文檔:
正如概述中提到的,Python 區分二進制和文本 I/O。以二進制模式打開的文件(包括
'b'
在mode參數中)將內容作為bytes
對象返回,無需任何解碼。在文本模式下(默認,或當't'
包含在mode參數中時),文件的內容作為 返回str
,字節已首先使用平臺相關的編碼或使用指定的編碼(如果給定)進行解碼。
不出所料,您應該對文本數據使用(默認)文本模式,對二進制數據使用二進制模式——包括pickle
明確定義為二進制的數據:
該
pickle
模塊實現了用于序列化和反序列化 Python 對象結構的二進制協議。“pickling”是將 Python 對象層次結構轉換為字節流的過程,“unpickling”是相反的操作,即字節流(來自二進制文件或https://docs.python.org/3/glossary .html#term-bytes-like-object ) 被轉換回對象層次結構。
Python 3 處理文本和二進制數據之間的區別與 Python 2完全不同——實際上,這是主版本號更改的主要原因。因此,有時沒有充分考慮區別的代碼在 Python 2 中似乎“正常工作”(但隨后經常會以意想不到的方式進一步咬你)。
添加回答
舉報
0/150
提交
取消