解决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实现拷贝多个文件到同一目录的方法
Sep 19 Python
Windows上使用Python增加或删除权限的方法
Apr 24 Python
Python中pillow知识点学习
Apr 30 Python
django一对多模型以及如何在前端实现详解
Jul 24 Python
django echarts饼图数据动态加载的实例
Aug 12 Python
基于MATLAB和Python实现MFCC特征参数提取
Aug 13 Python
浅谈Python 敏感词过滤的实现
Aug 15 Python
python3.7环境下安装Anaconda的教程图解
Sep 10 Python
python同时替换多个字符串方法示例
Sep 17 Python
导入tensorflow时报错:cannot import name 'abs'的解决
Oct 10 Python
python爬虫爬取监控教务系统的思路详解
Jan 08 Python
Python下载的11种姿势(小结)
Nov 18 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
文章推荐系统(二)
2006/10/09 PHP
php多种形式发送邮件(mail qmail邮件系统 phpmailer类)
2014/01/22 PHP
PHP实现格式化文件数据大小显示的方法
2015/01/03 PHP
PHP二维数组排序简单实现方法
2016/02/14 PHP
PHP使用DOM和simplexml读取xml文档的方法示例
2017/02/08 PHP
Javascript Tab 导航插件 (23个)
2009/06/11 Javascript
jQuery动态添加、删除元素的方法
2014/01/09 Javascript
jquery日历控件实现方法分享
2014/03/07 Javascript
jQuery 重复加载错误以及修复方法
2014/12/16 Javascript
基于Jquery+div+css实现弹出登录窗口(代码超简单)
2015/10/27 Javascript
JavaScript阻止回车提交表单的方法
2015/12/30 Javascript
解析JavaScript数组方法reduce
2016/12/12 Javascript
Bootstrap下拉菜单样式
2017/02/07 Javascript
tablesorter.js表格排序使用方法(支持中文排序)
2017/02/10 Javascript
JavaScript中立即执行函数实例详解
2017/11/04 Javascript
vue 实现 ios 原生picker 效果及实现思路解析
2017/12/06 Javascript
Vue+jquery实现表格指定列的文字收缩的示例代码
2018/01/09 jQuery
JavaScript中Dom操作实例详解
2019/07/08 Javascript
[55:04]海涛DOTA2死魂复燃6.82版本介绍
2014/09/28 DOTA
[10:21]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Aster 选手采访
2021/03/11 DOTA
python连接mysql数据库示例(做增删改操作)
2013/12/31 Python
Python用sndhdr模块识别音频格式详解
2018/01/11 Python
django celery redis使用具体实践
2019/04/08 Python
Python Process多进程实现过程
2019/10/22 Python
PyQT5 emit 和 connect的用法详解
2019/12/13 Python
Python基础之高级变量类型实例详解
2020/01/03 Python
python GUI库图形界面开发之PyQt5 Qt Designer工具(Qt设计师)详细使用方法及Designer ui文件转py文件方法
2020/02/26 Python
pymongo insert_many 批量插入的实例
2020/12/05 Python
为您搜罗全球潮流時尚品牌:HBX
2019/12/04 全球购物
车间主管岗位职责
2013/11/14 职场文书
大学生职业生涯规划方案
2014/01/03 职场文书
蜗居观后感
2015/06/11 职场文书
新教师教学工作总结
2015/08/12 职场文书
导游词之吉林吉塔
2019/11/11 职场文书
Springboot集成阿里云OSS上传文件系统教程
2021/06/28 Java/Android
Kubernetes控制节点的部署
2022/04/01 Servers