解决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 检查数组元素是否存在类似PHP isset()方法
Oct 14 Python
python使用PIL缩放网络图片并保存的方法
Apr 24 Python
在Python程序中进行文件读取和写入操作的教程
Apr 28 Python
python2与python3中关于对NaN类型数据的判断和转换方法
Oct 30 Python
pycharm的console输入实现换行的方法
Jan 16 Python
对Python w和w+权限的区别详解
Jan 23 Python
Python使用修饰器进行异常日志记录操作示例
Mar 19 Python
Python 3.8中实现functools.cached_property功能
May 29 Python
Django框架models使用group by详解
Mar 11 Python
如何把python项目部署到linux服务器
Aug 26 Python
python批量修改交换机密码的示例
Sep 22 Python
浅谈Python数学建模之线性规划
Jun 23 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数据库连接类~~做成一个分页类!
2006/11/25 PHP
PHP 动态随机生成验证码类代码
2010/04/09 PHP
php中引用符号(&)的使用详解
2013/11/13 PHP
php中JSON的使用与转换
2015/01/14 PHP
thinkPHP5.0框架引入Traits功能实例分析
2017/03/18 PHP
yii2多图上传组件的使用教程
2018/05/10 PHP
php生成微信红包数组的方法
2019/09/05 PHP
php判断IP地址是否在多个IP段内
2020/08/18 PHP
让你的PHP,APACHE,NGINX支持大文件上传
2021/03/09 PHP
javascript 设计模式之单体模式 面向对象学习基础
2010/04/18 Javascript
用jQuery中的ajax分页实现代码
2011/09/20 Javascript
一个可拖拽列宽表格实例演示
2012/11/26 Javascript
javascript通过navigator.userAgent识别各种浏览器
2013/10/25 Javascript
jQuery中prevUntil()方法用法实例
2015/01/08 Javascript
Javascript中数组方法汇总(推荐)
2015/04/01 Javascript
javascript数据结构之二叉搜索树实现方法
2015/11/25 Javascript
jquery实现异步加载图片(懒加载图片一种方式)
2017/04/24 jQuery
vue使用mint-ui实现下拉刷新和无限滚动的示例代码
2017/11/06 Javascript
微信小程序支付PHP代码
2018/08/23 Javascript
js、jquery实现列表模糊搜索功能过程解析
2020/03/27 jQuery
vue绑定数字类型 value为数字的实例
2020/08/31 Javascript
vue自定义组件实现双向绑定
2021/01/13 Vue.js
[36:05]DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs Optic
2018/04/01 DOTA
Python2.7基于淘宝接口获取IP地址所在地理位置的方法【测试可用】
2017/06/07 Python
详解Python Matplotlib解决绘图X轴值不按数组排序问题
2019/08/05 Python
pandas的to_datetime时间转换使用及学习心得
2019/08/11 Python
python实现的Iou与Giou代码
2020/01/18 Python
Python 字典中的所有方法及用法
2020/06/10 Python
JupyterNotebook 输出窗口的显示效果调整实现
2020/09/22 Python
linux系统都有哪些运行级别
2016/03/26 面试题
《彭德怀和他的大黑骡子》教学反思
2014/04/12 职场文书
中层干部竞聘演讲稿
2014/05/15 职场文书
常务副县长“三严三实”对照检查材料思想汇报
2014/10/05 职场文书
2015教师节通讯稿
2015/07/20 职场文书
初中团支书竞选稿
2015/11/21 职场文书
怎么禁用Win11输入法 最新Win11输入法关闭教程
2022/08/05 数码科技