最近遇到比較麻煩的是字串與檔案的處理,Python 3 裡的字串都是以 unicode 處理,好處當然是不用轉來轉去了,比較麻煩就是讀取檔案跟寫檔案的時候。我的程式有同時用到 subprocess、urllib/urllib2與一般檔案操作,以下是整理:
- 進行 subprocess pipe 操作時,讀出時,都是 bytes
- 使用 urllib/urllib2 讀取時,都是 bytes
- 使用一般檔案操作,沒特別指定的話,檔案編碼會以你當前的環境編碼來讀取,預定是讀取文字檔。
所以在讀取時,為了後續能用一樣的邏輯來讀取,我統一以 binary 來讀取,避掉 encoding 問題(對於 python 3 在 binary mode時,也能正確分行、tokenize這件事上,真的是深感佩服)。是說剛好之後也不需要做精確的內容判斷,所以也不用硬轉成 string(unicode),在 python3 時,都以 bytes 存在。在 python 2,讀出來就都是一般的 string (無 unicode),不是 bytes。
寫入時,也儘量使用 bytes 去寫入,避免encoding轉來轉去的問題。
沒有留言:
張貼留言