解决uWSGI的编码问题详解


Posted in Python onMarch 24, 2017

发现问题

最近工作中遇到一个问题,在把 Flask 写的应用通过 Supervisor+uWSGI 部署到正式服务器上时,出现了这样的错误:

Unable to print the message and arguments ? possible formatting error.

或者

UnicodeEncodeError: ‘ascii' codec can't encode characters in position 24-25: ordinal not in range(128)

有趣的是,直接在 Python 环境下运行的时候,没有这样的错误。使用 uwsgi uwsgi.ini 这种方式来运行也正常。

由于对 unicode 的支持不够完善,这种报错经常会出现在 Python2 中,但我的所有程序都在 Python3 中写成,不应该再出现这样的错误。况且,所有的 python 文件都在首行设定了编码:

# -*- coding: utf-8 -*-

我的环境如下:

  • Ubuntu 16.04.1 LTS
  • Python 3.5.2
  • uWSGI 2.0.14 (in python3 pip)
  • Supervisor 3.3.1 (in python2 pip)

uwsgi.ini 配置文件内容如下:

[uwsgi]
master = true

wsgi-file = manage.py
callable = app

processes = 2
threads = 2
max-requests = 6000
chmod-socket = 664

uid = app
gid = app

buffer-size = 32768

venv = {project_dir}/venv

; http = 127.0.0.1:5001

logto = {project_dir}/logs/uwsgi.log

由于直接使用 Python 和 uwsgi 都不会出现这样的错误,因此可以判断应该是环境编码设置导致的问题。

查看服务器的编码如下:

% locale
LANG=C
LANGUAGE=C:
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=en_US.UTF-8

发现 LANG 和 LANGUAGE 环境变量并没有设置。

可以在 uwsgi.ini 中设定这两个环境变量的值。经过测试,发现实际起作用的是 LANGUAGE 。

env LANG="en_US.UTF-8"
env LANGUAGE="en_US.UTF-8"

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者使用python能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python按照多个字符对字符串进行分割的方法
Mar 17 Python
django使用html模板减少代码代码解析
Dec 12 Python
在Python中定义一个常量的方法
Nov 10 Python
利用nohup来开启python文件的方法
Jan 14 Python
Python实现的IP端口扫描工具类示例
Feb 15 Python
Python3 log10()函数简单用法
Feb 19 Python
PyQt5实现简单数据标注工具
Mar 18 Python
对python中的float除法和整除法的实例详解
Jul 20 Python
浅谈pycharm导入pandas包遇到的问题及解决
Jun 01 Python
Pytorch 解决自定义子Module .cuda() tensor失败的问题
Jun 23 Python
10个顶级Python实用库推荐
Mar 04 Python
Python中time标准库的使用教程
Apr 13 Python
Python中动态创建类实例的方法
Mar 24 #Python
python3中set(集合)的语法总结分享
Mar 24 #Python
Python Socket编程详细介绍
Mar 23 #Python
python3中int(整型)的使用教程
Mar 23 #Python
python利用Guetzli批量压缩图片
Mar 23 #Python
python3中str(字符串)的使用教程
Mar 23 #Python
python常用知识梳理(必看篇)
Mar 23 #Python
You might like
PHP图片验证码制作实现分享(全)
2012/05/10 PHP
ubuntu下配置nginx+php+mysql详解
2015/09/10 PHP
PHPWind9.0手动屏蔽验证码解决后台关闭验证码但是依然显示的问题
2016/08/12 PHP
PHP中常用的魔术方法
2017/04/28 PHP
利用PHP如何统计Nginx日志的User Agent数据
2019/03/06 PHP
PHP goto语句用法实例
2019/08/06 PHP
javascript 尚未实现错误解决办法
2008/11/27 Javascript
SOSO地图API使用(一)在地图上画圆实现思路与代码
2013/01/15 Javascript
jquery统计输入文字的个数并对其进行判断
2014/01/07 Javascript
使用jquery动态加载Js文件和Css文件
2015/10/24 Javascript
老生常谈onBlur事件与onfocus事件(js)
2016/07/09 Javascript
详解Angular2中的编程对象Observable
2016/09/17 Javascript
jQuery实现的两种简单弹窗效果示例
2018/04/18 jQuery
clipboard.js在移动端复制失败的解决方法
2018/06/13 Javascript
[09:43]DOTA2每周TOP10 精彩击杀集锦vol.5
2014/06/25 DOTA
[01:01:22]VGJ.S vs OG 2018国际邀请赛淘汰赛BO3 第一场 8.22
2018/08/23 DOTA
Python实现两个list对应元素相减操作示例
2017/06/09 Python
关于python写入文件自动换行的问题
2018/06/23 Python
Python3 读、写Excel文件的操作方法
2018/10/20 Python
python pyheatmap包绘制热力图
2018/11/09 Python
python print输出延时,让其立刻输出的方法
2019/01/07 Python
python 获取毫秒数,计算调用时长的方法
2019/02/20 Python
Python字典生成式、集合生成式、生成器用法实例分析
2020/01/07 Python
python实现滑雪游戏
2020/02/22 Python
pycharm 实现光标快速移动到括号外或行尾的操作
2021/02/05 Python
彻底弄明白CSS3的Media Queries(跨平台设计)
2010/07/27 HTML / CSS
表单button的outline在firefox浏览器下的问题
2012/12/24 HTML / CSS
7款设计巧妙的css3飘带状3D立体效果的导航菜单和表单窗口
2013/02/04 HTML / CSS
英国羊绒服装购物网站:Pure Collection
2018/10/22 全球购物
小学生期末自我鉴定
2014/01/19 职场文书
新兵入伍心得体会
2014/09/04 职场文书
法院授权委托书格式
2014/09/28 职场文书
群众路线个人整改方案
2014/10/25 职场文书
财务统计员岗位职责
2015/04/14 职场文书
python 爬取天气网卫星图片
2021/06/07 Python
Python捕获、播放和保存摄像头视频并提高视频清晰度和对比度
2022/04/14 Python