之前寫的發郵件的程序部署到vps的時候出現了 UnicodeDecodeError: 'ascii' codec can't decode byte 0x....
的錯誤。
按理說UnicodeDecodeError是python2才有的錯誤,這在python3出現是什么情況?
根據報錯觀察代碼,發現打開文件的時候沒指定encoding,於是指定'utf-8',改成這樣:
with open(mail_html, 'r', encoding='utf-8') as f:
template = f.read()
改完之后還是這個錯誤,但是byte 0xe6 變成了別的值,說明指定編碼是有效的(在沒指定locale的主機上居然按ascii讀取文件???!! Σ( ° △ °|||)︴)
問題還沒完全解決,網上查了些資料,基本都是復制粘貼,看起來也沒什么價值。
再仔細想想,因為代碼調用了print,那會不會是stdout不支持中文顯示?
於是找到之前看到的一段導入codecs設置stdout相關的代碼:
import sys
import codecs
sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())
這樣設置之后,的確OK了。
> 更新相關內容: > https://blog.lilydjwg.me/2016/10/21/set-stdout-encoding-in-python.206653.html