解决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 错误和异常小结
Oct 09 Python
pygame学习笔记(2):画点的三种方法和动画实例
Apr 15 Python
在Python中处理字符串之isdecimal()方法的使用
May 20 Python
Python中的is和==比较两个对象的两种方法
Sep 06 Python
Python 编程速成(推荐)
Apr 15 Python
Python 给屏幕打印信息加上颜色的实现方法
Apr 24 Python
如何利用python给图片添加半透明水印
Sep 06 Python
Python3 合并二叉树的实现
Sep 30 Python
python实现银行实战系统
Feb 26 Python
使用Python第三方库pygame写个贪吃蛇小游戏
Mar 06 Python
教你用Python写一个植物大战僵尸小游戏
Apr 25 Python
Django实现WebSocket在线聊天室功能(channels库)
Sep 25 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/03/02 日漫
PHP+DBM的同学录程序(2)
2006/10/09 PHP
php下使用以下代码连接并测试
2008/04/09 PHP
php mssql扩展SQL查询中文字段名解决方法
2012/10/15 PHP
phpexcel导出excel的颜色和网页中的颜色显示不一致
2012/12/11 PHP
深入解读php中关于抽象(abstract)类和抽象方法的问题分析
2014/01/03 PHP
PHP 只允许指定IP访问(允许*号通配符过滤IP)
2014/07/08 PHP
PHP中使用jQuery+Ajax实现分页查询多功能操作(示例讲解)
2017/09/17 PHP
php使用fputcsv实现大数据的导出操作详解
2020/02/27 PHP
JS和JQ的event对象区别分析
2014/11/24 Javascript
jquery渐隐渐显的图片幻灯闪烁切换实现方法
2015/02/26 Javascript
javascript中callee与caller的区别分析
2015/04/20 Javascript
angular ngClick阻止冒泡使用默认行为的方法
2016/11/03 Javascript
详解angular2采用自定义指令(Directive)方式加载jquery插件
2017/02/09 Javascript
老生常谈jacascript DOM节点获取
2017/04/17 Javascript
axios post提交formdata的实例
2018/03/16 Javascript
微信小程序购物车、父子组件传值及calc的注意事项总结
2018/11/14 Javascript
Android 自定义view仿微信相机单击拍照长按录视频按钮
2019/07/19 Javascript
js实现3D粒子酷炫动态旋转特效
2020/09/13 Javascript
[03:40]DOTA2亚洲邀请赛小组赛第二日 赛事回顾
2015/01/31 DOTA
Python基于动态规划算法解决01背包问题实例
2017/12/06 Python
Python实现求解括号匹配问题的方法
2018/04/17 Python
浅谈python标准库--functools.partial
2019/03/13 Python
如何基于python实现脚本加密
2019/12/28 Python
使用python matploblib库绘制准确率,损失率折线图
2020/06/16 Python
经济实惠的豪华家具:My-Furniture
2019/03/12 全球购物
凯蒂·佩里个人女鞋品牌:Katy Perry Collections
2019/04/04 全球购物
娇韵诗Clarins意大利官方网站:法国天然护肤品牌
2020/03/11 全球购物
linux面试题参考答案(7)
2012/10/29 面试题
优秀教师获奖感言
2014/01/31 职场文书
《列夫托尔斯泰》教学反思
2014/02/10 职场文书
大学生个人自荐信
2014/02/24 职场文书
校园文化标语
2014/06/18 职场文书
租房安全协议书
2014/08/20 职场文书
社区四风存在问题及整改措施
2014/10/26 职场文书
2014年小学教师工作总结
2014/11/10 职场文书