python encoding报错_菜鸟世界 -docker 环境下解决python 的 UnicodeEncodeError 错误
1、 問(wèn)題描述
使用docker部署python的web服務(wù),框架使用flask,服務(wù)部署以后進(jìn)行測(cè)試,服務(wù)端報(bào)出UnicodeEncodeError
我用的python版本是3.6,按理說(shuō),對(duì)字符編碼的處理已經(jīng)比python2.x提升了很大一截,不應(yīng)該出現(xiàn)這樣的問(wèn)題,查了一些資料,矛頭指向了docker里的終端輸出編碼。
服務(wù)報(bào)錯(cuò)的地方是記錄日志的代碼,用的是logging模塊,并沒(méi)有記錄到文件中,而是輸出到sys.stdout中。
2、 解決過(guò)程
2.1?PYTHONIOENCODING
在Dockerfile里加入下面這句話
ENV PYTHONIOENCODING=utf-8
制作好鏡像以后,啟動(dòng)容器時(shí),要添加 -e PYTHONIOENCODING=utf-8
docker run -e PYTHONIOENCODING=utf-8 -d --rm -p8070:80 --name test_kg kg/flask
進(jìn)入容器后,直接啟動(dòng)服務(wù),python app.py 然后發(fā)送請(qǐng)求進(jìn)行測(cè)試,這次沒(méi)有再報(bào)錯(cuò)誤
但是,當(dāng)我使用uwsgi啟動(dòng)時(shí),進(jìn)行測(cè)試,仍然會(huì)報(bào)錯(cuò),原理我說(shuō)不清楚,但我猜測(cè)肯定和sys.stdout有關(guān)
2.2?sys.stdout
設(shè)置sys.stdout的編碼
logger = logging.getLogger('logger')
logger.setLevel(level=logging.INFO)
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')
handler = logging.StreamHandler(sys.stdout)
handler.setLevel(logging.INFO)
再次啟動(dòng)服務(wù),沒(méi)有再報(bào)錯(cuò)
《新程序員》:云原生和全面數(shù)字化實(shí)踐50位技術(shù)專家共同創(chuàng)作,文字、視頻、音頻交互閱讀總結(jié)
以上是生活随笔為你收集整理的python encoding报错_菜鸟世界 -docker 环境下解决python 的 UnicodeEncodeError 错误的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python自动化任务_用Python实
- 下一篇: python修改字典某一项的函数_pyt