用python3+flask+uWSGI+supervisor部署web应用时EncodingError的解决方法

问题:Python3其实是默认使用unicode(UTF-8)编码的,但是当使用uWSGI来部署应用并且用supervisor作进程守护的时候,就会出现编码问题,比较典型的是用于检查的print命令报UnicodeEncodingError,内容是有字符无法用ASC II编码。UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 2-5: ordinal not in range(128)分析:经过一轮google
摘要由CSDN通过智能技术生成

问题:

Python3其实是默认使用unicode(UTF-8)编码的,但是当使用uWSGI来部署应用并且用supervisor作进程守护的时候,就会出现编码问题,比较典型的是用于检查的print命令报UnicodeEncodingError,内容是有字符无法用ASC II编码。

UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position 2-5: ordinal not in range(128)
分析:

经过一轮google,怀疑问题出在系统环境的locale设置上,然而在修改了LC_ALL、LC_LANG等等系统常量后重启仍然没有问题。在已经成功部署的应用代码中检查环境变量,发现sys.stdout.encoding居然是“ANSI_X3.4-1968”而不是“UTF-8”。这样的错误在python命令行解析器中是无法重现的,因此怀疑是解析器的设置和uWSGI或者supervisor的环境参数有冲突,选择了服从调用者的参数设置。

解决:

又google了一下,有人在程序中使用

sys.stdout=io.TextIOWrapper(sys.stdout.buffer, encoding=‘utf-8’)   

来强制修改sys.stdout.encoding的值,但是也指出这样并不彻底。在碰到有python模块override这个buffer设置使用默认编码的情况下,还是会出错。于是想到了修改uWSGI或者supervisord的默认编码设置。按这个思路google的时候,发现uWSGI并没有关于编码的设置,验证了一下,不使用supervisor直接用uwsgi XXX.ini的方式部署服务是不会出现编码错误的,说

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值