[python3]未配置locale的主機出現UnicodeDecodeError: 'ascii' codec can't decode byte 0x....的解決


之前寫的發郵件的程序部署到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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM