解决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变量和字符串详解
Apr 29 Python
用 Python 爬了爬自己的微信朋友(实例讲解)
Aug 25 Python
go和python变量赋值遇到的一个问题
Aug 31 Python
Python中 map()函数的用法详解
Jul 10 Python
python安装pil库方法及代码
Jun 25 Python
pycharm设置鼠标悬停查看方法设置
Jul 29 Python
python lambda表达式(匿名函数)写法解析
Sep 16 Python
解决tensorflow由于未初始化变量而导致的错误问题
Jan 06 Python
Python3 操作 MySQL 插入一条数据并返回主键 id的实例
Mar 02 Python
python如何快速生成时间戳
Jul 21 Python
PyCharm中关于安装第三方包的三个建议
Sep 17 Python
Python  lambda匿名函数和三元运算符
Apr 19 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
全国FM电台频率大全 - 16 河南省
2020/03/11 无线电
PHP 变量的定义方法
2010/01/26 PHP
PHP学习之数组的定义和填充
2011/04/17 PHP
php判断手机浏览还是web浏览,并执行相应的动作简单实例
2016/07/28 PHP
PHP简单实现二维数组的矩阵转置操作示例
2017/11/24 PHP
php微信公众号开发之秒杀
2018/10/20 PHP
javascript读取xml
2006/11/04 Javascript
javascript得到XML某节点的子节点个数的脚本
2008/10/11 Javascript
jQuery EasyUI API 中文文档 - Menu菜单
2011/10/03 Javascript
eval的两组性能测试数据
2012/08/17 Javascript
浅析javascript中function 的 length 属性
2014/05/27 Javascript
jQuery事件绑定on()与弹窗实现代码
2016/04/28 Javascript
vue分类筛选filter方法简单实例
2017/03/30 Javascript
基于JSONP原理解析(推荐)
2017/12/04 Javascript
js中如何完美的解析数据
2018/03/18 Javascript
jQuery length 和 size()区别总结
2018/04/26 jQuery
python3访问sina首页中文的处理方法
2014/02/24 Python
python查询mysql中文乱码问题
2014/11/09 Python
Python实现的简单hangman游戏实例
2015/06/28 Python
浅谈python中的数字类型与处理工具
2017/08/02 Python
python中将函数赋值给变量时需要注意的一些问题
2017/08/18 Python
对python requests的content和text方法的区别详解
2018/10/11 Python
Python爬虫抓取技术的一些经验
2019/07/12 Python
python中p-value的实现方式
2019/12/16 Python
中国综合网上购物商城:苏宁易购
2016/08/09 全球购物
Blue Nile台湾:钻石珠宝商,订婚首饰、结婚戒指和精品首饰
2017/11/24 全球购物
电大毕业生自我鉴定
2013/11/10 职场文书
个人优缺点自我评价
2014/01/27 职场文书
团支部推优材料
2014/05/21 职场文书
品牌推广策划方案
2014/05/28 职场文书
2015年端午节活动总结
2015/02/11 职场文书
大学生社会实践活动总结报告
2015/05/06 职场文书
FP-growth算法发现频繁项集——构建FP树
2021/06/24 Python
mysql分组后合并显示一个字段的多条数据方式
2022/01/22 MySQL
Smart 2 车辆代号 HC11 全新谍照曝光
2022/04/21 数码科技
MySQL中的全表扫描和索引树扫描
2022/05/15 MySQL