解决uWSGI的编码问题详解

 更新时间:2017年03月24日 11:44:31   作者:zrong  
最近在用Flask 写的应用通过 Supervisor+uWSGI 部署到正式服务器上时出现了错误,通过查找相关的资料终于解决了,所以想着分享出来给大家,下面这篇文章主要介绍了解决uWSGI的编码问题的相关资料,需要的朋友可以参考下。

发现问题

最近工作中遇到一个问题,在把 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分析最近大火的网剧《隐秘的角落》

    这篇文章主要介绍了Python分析最近大火的网剧《隐秘的角落》,本文通过实例代码图文相结合给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-07-07
  • Python基本语法之运算符功能与用法详解

    Python基本语法之运算符功能与用法详解

    这篇文章主要介绍了Python基本语法之运算符功能与用法,结合实例形式总结分析了Python常见运算符相关使用技巧与操作注意事项,需要的朋友可以参考下
    2019-10-10
  • 教你如何用一行Python代码实现GUI图形界面

    教你如何用一行Python代码实现GUI图形界面

    GUI(图形用户界面),顾名思义就是用图形的方式,来显示计算机操作的界面,更加方便且直观。本文将用一行代码实现GUI界面的制作,需要的可以参考一下
    2022-05-05
  • python删除服务器文件代码示例

    python删除服务器文件代码示例

    这篇文章主要介绍了python删除服务器文件代码示例,列举了两个实例,分享了相关代码示例,小编觉得还是挺不错的,具有一定借鉴价值,需要的朋友可以参考下
    2018-02-02
  • 基于Python编写微信清理工具的示例代码

    基于Python编写微信清理工具的示例代码

    这篇文章主要和大家分享一个用Python语言编写的微信清理小工具的示例代码,而且该工具不会删除文字的聊天记录,感兴趣的可以了解一下
    2022-05-05
  • python目标检测数据增强的代码参数解读及应用

    python目标检测数据增强的代码参数解读及应用

    这篇文章主要为大家介绍了python目标检测数据增强的代码参数解读及应用,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-05-05
  • 用Python生成会跳舞的美女

    用Python生成会跳舞的美女

    大家好,本篇文章主要讲的是用Python生成会跳舞的美女,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下
    2022-01-01
  • python利用openpyxl拆分多个工作表的工作簿的方法

    python利用openpyxl拆分多个工作表的工作簿的方法

    这篇文章主要介绍了python利用openpyxl拆分多个工作表的工作簿的方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-09-09
  • python操作字典类型的常用方法(推荐)

    python操作字典类型的常用方法(推荐)

    下面小编就为大家带来一篇python操作字典类型的常用方法(推荐)。小编觉得挺不错的,现在分享给大家,也给大家做个参考,一起跟随小编过来看看吧
    2016-05-05
  • Python 2种方法求某个范围内的所有素数(质数)

    Python 2种方法求某个范围内的所有素数(质数)

    这篇文章主要介绍了Python 2种方法求某个范围内的所有素数(质数),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01

最新评论