處理文本的最佳實踐是「Unicode 三明治」
- 要儘早把輸入(例如讀取文件時)的字節序列解碼成字符串。
- 這種三明治中的「肉片」是程序的業務邏輯,在這裏只能處理字符串對象。
- 在其餘處理過程當中,必定不能編碼或解碼。
- 對輸出來講,則要儘可能晚地把字符串編碼成字節序列。
案例
例如,在 Django 中,
視圖應該輸出 Unicode 字符串;
Django 會負責把響應編碼成字節序列,並且默認使用 UTF-8 編碼。
編碼建議 顯示指明編碼
編碼默認值的最佳建議是:別依賴默認值
明確指定encodeing編碼
二進制模式
除非想判斷編碼,不然不要在二進制模式中打開文本文件;
即使如此,也應該使用 Chardet,而不是從新發明輪子spa
總結
Unicode 三明治
- 儘早 字節序列解碼成字符串
- 三明治中的「肉片」是程序的業務邏輯,在這裏只能處理字符串對象
- 儘可能晚地把字符串編碼成字節序列
顯示編碼
別再二進制中打開文本,判斷編碼應該使用 Chardet