解决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获取本地计算机名字的方法
Apr 29 Python
Python中使用items()方法返回字典元素对的教程
May 21 Python
浅谈编码,解码,乱码的问题
Dec 30 Python
python3实现ftp服务功能(客户端)
Mar 24 Python
Python3.4编程实现简单抓取爬虫功能示例
Sep 14 Python
python selenium 获取标签的属性值、内容、状态方法
Jun 22 Python
使用pip发布Python程序的方法步骤
Oct 11 Python
Python 中Django安装和使用教程详解
Jul 03 Python
用python写测试数据文件过程解析
Sep 25 Python
Python3监控windows,linux系统的CPU、硬盘、内存使用率和各个端口的开启情况详细代码实例
Mar 18 Python
python多进程下的生产者和消费者模型
May 07 Python
Pycharm新手使用教程(图文详解)
Sep 17 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
ThinkPHP 防止表单重复提交的方法
2011/08/08 PHP
PHP正则表达式替换站点关键字链接后空白的解决方法
2014/09/16 PHP
php使用simplexml_load_file加载XML文件并显示XML的方法
2015/03/19 PHP
ThinkPHP2.x防范XSS跨站攻击的方法
2015/09/25 PHP
PHP常用文件操作函数和简单实例分析
2016/06/03 PHP
利用phpexcel对数据库数据的导入excel(excel筛选)、导出excel
2017/04/27 PHP
laravel 执行迁移回滚示例
2019/10/23 PHP
php 多继承的几种常见实现方法示例
2019/11/18 PHP
jQuery 锚点跳转滚动条平滑滚动一句话代码
2010/04/30 Javascript
使用jQuery内容过滤选择器选择元素实例讲解
2013/04/18 Javascript
jQuery插件开发的两种方法及$.fn.extend的详解
2014/01/16 Javascript
荐书|您有一份JavaScript书单待签收
2017/07/21 Javascript
javascript浏览器用户代理检测脚本实现方法
2017/10/27 Javascript
JavaScript实现一个带AI的井字棋游戏源码
2018/05/21 Javascript
微信小程序实现工作时间段选择
2019/02/15 Javascript
vue实现登录页面的验证码以及验证过程解析(面向新手)
2019/08/02 Javascript
javascript前端实现多视频上传
2020/12/13 Javascript
Python实现动态添加类的属性或成员函数的解决方法
2014/07/16 Python
Python中用于计算对数的log()方法
2015/05/15 Python
python妹子图简单爬虫实例
2015/07/07 Python
Selenium向iframe富文本框输入内容过程图解
2020/04/10 Python
css3实现的多级渐变下拉菜单导航效果代码
2015/08/31 HTML / CSS
Html5实现首页动态视频背景的示例代码
2019/09/25 HTML / CSS
美国当红的名品折扣网:Gilt Groupe
2016/08/15 全球购物
Clarria化妆品官方网站:购买天然和有机化妆品系列
2018/04/08 全球购物
澳大利亚儿童精品仓库:Goo & Co.
2019/06/20 全球购物
美国电子产品购物网站:BuyDig.com
2020/06/17 全球购物
struct与class的区别
2014/02/03 面试题
中专生自荐信
2013/10/12 职场文书
汽修专业学生自我鉴定
2013/11/16 职场文书
个人生活学习自我评价范文
2013/11/26 职场文书
自我鉴定三原则
2014/01/13 职场文书
给领导的致歉信范文
2014/01/13 职场文书
2014年法务工作总结
2014/12/11 职场文书
SpringBoot整合Redis入门之缓存数据的方法
2021/11/17 Redis
SpringBoot 整合mongoDB并自定义连接池的示例代码
2022/02/28 MongoDB