解决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实现批量转换文件编码(批转换编码示例)
Jan 23 Python
python使用Tkinter显示网络图片的方法
Apr 24 Python
浅谈Python中的闭包
Jul 08 Python
理解python中生成器用法
Dec 20 Python
Python爬虫实战:分析《战狼2》豆瓣影评
Mar 26 Python
python3 实现的对象与json相互转换操作示例
Aug 17 Python
Pytorch对Himmelblau函数的优化详解
Feb 29 Python
解决Python图形界面中设置尺寸的问题
Mar 05 Python
Tensorflow加载Vgg预训练模型操作
May 26 Python
基于selenium及python实现下拉选项定位select
Jul 22 Python
PyQt5多线程防卡死和多窗口用法的实现
Sep 15 Python
如何使用Python对NetCDF数据做空间相关分析
Apr 21 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 addslashes 函数详细分析说明
2009/06/23 PHP
最新的php 文件上传模型,支持多文件上传
2009/08/13 PHP
PHP 生成微信红包代码简单
2016/03/25 PHP
php版微信数据统计接口用法示例
2016/10/12 PHP
完美解决thinkphp唯一索引重复时出错的问题
2017/03/31 PHP
在vs2010中调试javascript代码方法
2011/02/11 Javascript
IE图片缓存document.execCommand("BackgroundImageCache",false,true)
2011/03/01 Javascript
javascript实现密码强度显示
2015/03/18 Javascript
基于jQuey实现鼠标滑过变色(整行变色)
2015/12/07 Javascript
Vuejs第七篇之Vuejs过渡动画案例全面解析
2016/09/05 Javascript
AngularJS控制器之间的通信方式详解
2016/11/03 Javascript
AngularJS对动态增加的DOM实现ng-keyup事件示例
2018/03/12 Javascript
详谈js的变量提升以及使用方法
2018/10/06 Javascript
python文件比较示例分享
2014/01/10 Python
python通过shutil实现快速文件复制的方法
2015/03/14 Python
基于python yield机制的异步操作同步化编程模型
2016/03/18 Python
Python实现将数据库一键导出为Excel表格的实例
2016/12/30 Python
python装饰器实例大详解
2017/10/25 Python
Flask框架web开发之零基础入门
2018/12/10 Python
Python-Tkinter Text输入内容在界面显示的实例
2019/07/12 Python
新手学习Python2和Python3中print不同的用法
2020/06/09 Python
Python浮点型(float)运算结果不正确的解决方案
2020/09/22 Python
如何利用pycharm进行代码更新比较
2020/11/04 Python
html5中localStorage本地存储的简单使用
2017/06/16 HTML / CSS
HTML5 canvas绘制的玫瑰花效果
2014/05/29 HTML / CSS
Pretty Little Thing爱尔兰:时尚女性服饰
2017/03/27 全球购物
LEGO玩具英国官方商店:LEGO Shop GB
2018/03/27 全球购物
美国婚礼礼品网站:MyWeddingFavors
2018/09/26 全球购物
广州一家公司的.NET面试题
2016/06/11 面试题
Python里面search()和match()的区别
2016/09/21 面试题
保健品市场营销方案
2014/03/31 职场文书
中餐厅经理岗位职责
2014/04/11 职场文书
2014年五一劳动节社区活动总结
2014/04/14 职场文书
小学母亲节活动总结
2015/02/10 职场文书
python pygame入门教程
2021/06/01 Python
解决Redis启动警告问题
2022/02/24 Redis