解决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中无限元素列表的实现方法
Aug 18 Python
python django使用haystack:全文检索的框架(实例讲解)
Sep 27 Python
Scrapy的简单使用教程
Oct 24 Python
python如何读写json数据
Mar 21 Python
对python中raw_input()和input()的用法详解
Apr 22 Python
将Dataframe数据转化为ndarry数据的方法
Jun 28 Python
Python cv2 图像自适应灰度直方图均衡化处理方法
Dec 07 Python
Python编程图形库之Pillow使用方法讲解
Dec 28 Python
pytorch实现mnist分类的示例讲解
Jan 10 Python
python操作docx写入内容,并控制文本的字体颜色
Feb 13 Python
python+selenium+chromedriver实现爬虫示例代码
Apr 10 Python
python打包生成so文件的实现
Oct 30 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
2020年4月放送决定!第2期TV动画《邪神酱飞踢》视觉图&主题曲情报公开!
2020/03/06 日漫
Zerg基本策略
2020/03/14 星际争霸
php中隐形字符65279(utf-8的BOM头)问题
2014/08/16 PHP
php中fsockopen用法实例
2015/01/05 PHP
php文件下载处理方法分析
2015/04/22 PHP
PHP入门教程之日期与时间操作技巧总结(格式化,验证,获取,转换,计算等)
2016/09/11 PHP
php+mongodb判断坐标是否在指定多边形区域内的实例
2016/10/28 PHP
PHP给前端返回一个JSON对象的实例讲解
2018/05/31 PHP
Yii框架where查询用法实例分析
2019/10/22 PHP
php的对象传值与引用传值代码实例讲解
2021/02/26 PHP
Javascript中的Split使用方法与技巧
2007/03/09 Javascript
jQuery EasyUI NumberBox(数字框)的用法
2010/07/08 Javascript
深入理解JavaScript系列(9) 根本没有“JSON对象”这回事!
2012/01/15 Javascript
jquery提交form表单简单示例分享
2014/03/03 Javascript
JavaScript控制图片加载完成后调用回调函数的方法
2015/03/20 Javascript
js实现时间轴自动排列效果
2017/03/09 Javascript
AngularJS改变元素显示状态
2017/04/20 Javascript
JavaWeb表单及时验证功能在输入后立即验证(含用户类型,性别,爱好...的验证)
2017/06/09 Javascript
javascript性能优化之分时函数的介绍
2018/03/28 Javascript
5分钟学会Vue动画效果(小结)
2018/07/21 Javascript
JS实现动态星空背景效果
2019/11/01 Javascript
js键盘事件实现人物的行走
2020/01/17 Javascript
用js实现放大镜效果
2020/10/28 Javascript
[45:52]2018DOTA2亚洲邀请赛 4.1小组赛 A组加赛 LGD vs Liquid
2018/04/02 DOTA
python通过BF算法实现关键词匹配的方法
2015/03/13 Python
Scrapy爬虫实例讲解_校花网
2017/10/23 Python
python实现学生管理系统
2018/01/11 Python
使用 Python 快速实现 HTTP 和 FTP 服务器的方法
2019/07/22 Python
python Yaml、Json、Dict之间的转化
2020/10/19 Python
2013届毕业生求职信范文
2013/11/20 职场文书
2014年学校团委工作总结
2014/12/20 职场文书
幼儿教师小班个人总结
2015/02/05 职场文书
小学生运动会广播
2015/08/19 职场文书
高一军训口号
2015/12/25 职场文书
redis内存空间效率问题的深入探究
2021/05/17 Redis
使用GO语言实现Mysql数据库CURD的简单示例
2021/08/07 Golang