解决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 修改文件指定行的方法
May 15 Python
Python实现修改IE注册表功能示例
May 10 Python
Django1.9 加载通过ImageField上传的图片方法
May 25 Python
Python+selenium 获取一组元素属性值的实例
Jun 22 Python
Matplotlib中文乱码的3种解决方案
Nov 15 Python
Python中IP地址处理IPy模块的方法
Aug 16 Python
django和vue实现数据交互的方法
Aug 21 Python
python数值基础知识浅析
Nov 19 Python
python:目标检测模型预测准确度计算方式(基于IoU)
Jan 18 Python
Python DES加密实现原理及实例解析
Jul 17 Python
详解如何修改python中字典的键和值
Sep 29 Python
自定义Django_rest_framework_jwt登陆错误返回的解决
Oct 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
从Web查询数据库之PHP与MySQL篇
2009/09/25 PHP
php中将图片gif,jpg或mysql longblob或blob字段值转换成16进制字符串
2011/08/23 PHP
win7下memCache的安装过程(具体操作步骤)
2013/06/28 PHP
分享php代码将360浏览器导出的favdb的sqlite数据库文件转换为html
2015/12/09 PHP
php使用正则验证中文
2016/04/06 PHP
Javascript中的变量使用说明
2010/05/18 Javascript
javascript中字符串替换函数replace()方法与c# 、vb 替换有一点不同
2010/06/25 Javascript
正则表达式搭配js轻松处理json文本方便而老古
2013/02/17 Javascript
javascript阻止浏览器后退事件防止误操作清空表单
2013/11/22 Javascript
js检测网络是否具体连接功能的代码
2014/05/23 Javascript
网站发布后Bootstrap框架引用woff字体无法正常显示的解决方法
2016/11/24 Javascript
基于Javascript实现的不重复ID的生成器
2016/12/25 Javascript
JS+HTML5实现上传图片预览效果完整实例【测试可用】
2017/04/20 Javascript
利用js实现前后台传送Json的示例代码
2018/03/29 Javascript
Vue项目添加动态浏览器头部title的方法
2018/07/11 Javascript
JS返回页面时自动回滚到历史浏览位置
2018/09/26 Javascript
js实现自动播放匀速轮播图
2020/02/06 Javascript
python用户管理系统
2018/03/13 Python
对Python 数组的切片操作详解
2018/07/02 Python
Python逐行读取文件内容的方法总结
2020/02/14 Python
python实现图像拼接功能
2020/03/23 Python
Python定时从Mysql提取数据存入Redis的实现
2020/05/03 Python
基于python实现把json数据转换成Excel表格
2020/05/07 Python
python在linux环境下安装skimage的示例代码
2020/10/14 Python
详解使用python爬取抖音app视频(appium可以操控手机)
2021/01/26 Python
Python plt 利用subplot 实现在一张画布同时画多张图
2021/02/26 Python
详解CSS3开启硬件加速的使用和坑
2017/08/21 HTML / CSS
WoolOvers澳洲官方网站:英国针织服装公司
2018/05/13 全球购物
西班牙最大的在线滑板和街头服饰商店:Fillow.net
2019/04/15 全球购物
工地资料员岗位职责
2013/12/31 职场文书
《荷花》教学反思
2014/04/16 职场文书
学校火灾防控方案
2014/06/09 职场文书
优秀共产党员事迹材料
2014/12/18 职场文书
股份转让协议书范本
2015/01/27 职场文书
nginx容器方式反向代理实战
2022/04/18 Servers
Win10此设备不支持接收Miracast无法投影的解决方法
2022/07/07 数码科技