解决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 相关文章推荐
在 Django/Flask 开发服务器上使用 HTTPS
Jul 03 Python
Python的mysql数据库的更新如何实现
Jul 31 Python
python利用正则表达式搜索单词示例代码
Sep 24 Python
使用paramiko远程执行命令、下发文件的实例
Oct 01 Python
解决python报错MemoryError的问题
Jun 26 Python
python设计微型小说网站(基于Django+Bootstrap框架)
Jul 08 Python
Pandas+Matplotlib 箱式图异常值分析示例
Dec 09 Python
Python networkx包的实现
Feb 14 Python
Python MOCK SERVER moco模拟接口测试过程解析
Apr 13 Python
解决pymysql cursor.fetchall() 获取不到数据的问题
May 15 Python
Python实现一个简单的递归下降分析器
Aug 01 Python
Python关于拓扑排序知识点讲解
Jan 04 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取余函数介绍MOD(x,y)与x%y
2014/05/15 PHP
php错误日志简单配置方法
2016/07/11 PHP
PHP读MYSQL中文乱码的快速解决方法
2016/10/01 PHP
thinkPHP通用控制器实现方法示例
2017/11/23 PHP
PHP中strtr与str_replace函数运行性能简单测试示例
2019/06/22 PHP
让input框实现类似百度的搜索提示(基于jquery事件监听)
2014/01/31 Javascript
jQuery实现的手机发送验证码倒计时效果代码分享
2015/08/24 Javascript
关于数据与后端进行交流匹配(点亮星星)
2016/08/03 Javascript
js中常用的Tab切换效果(推荐)
2016/08/30 Javascript
详解webpack自动生成html页面
2017/06/29 Javascript
前端常见跨域解决方案(全)
2017/09/19 Javascript
javascript计算对象长度的方法
2017/10/25 Javascript
vue 不使用select实现下拉框功能(推荐)
2018/05/17 Javascript
Vue.js获取被选择的option的value和text值方法
2018/08/24 Javascript
JavaScript多种页面刷新方法小结
2019/04/04 Javascript
小程序怎样让wx.navigateBack更好用的方法实现
2019/11/01 Javascript
详解Python中用于计算指数的exp()方法
2015/05/14 Python
SQLite3中文编码 Python的实现
2017/01/11 Python
python针对不定分隔符切割提取字符串的方法
2018/10/26 Python
详解python:time模块用法
2019/03/25 Python
python3反转字符串的3种方法(小结)
2019/11/07 Python
Python +Selenium解决图片验证码登录或注册问题(推荐)
2020/02/09 Python
python GUI库图形界面开发之PyQt5信号与槽机制、自定义信号基础介绍
2020/02/25 Python
Python第三方库的几种安装方式(小结)
2020/04/03 Python
keras CNN卷积核可视化,热度图教程
2020/06/22 Python
Python 测试框架unittest和pytest的优劣
2020/09/26 Python
css3发光搜索表单分享
2014/04/11 HTML / CSS
印尼披萨外送专家:Domino’s Pizza印尼
2017/12/28 全球购物
澳大利亚最好的电动自行车:Leon Cycle
2020/12/19 全球购物
大四毕业生学习总结的自我评价
2013/10/31 职场文书
管理心得体会
2013/12/28 职场文书
高中军训感言1000字
2014/03/01 职场文书
教师批评与自我批评材料
2014/10/16 职场文书
出差报告格式模板
2014/11/06 职场文书
客户经理岗位职责
2015/01/31 职场文书
关于 Python json中load和loads区别
2021/11/07 Python