UnicodeEncodeError [Python3/Gunicorn/Nginx/Django]
Posted
技术标签:
【中文标题】UnicodeEncodeError [Python3/Gunicorn/Nginx/Django]【英文标题】: 【发布时间】:2017-12-08 19:20:24 【问题描述】:已解决
当我按照here 中的说明进行操作时发生此错误。 我设置了单元文件。我知道 LAN env 有价值的东西不能正确传输,它使用了默认的 ascii。您可以通过在单元文件中添加一行来解决此问题。发现这真是一段漫长的旅程......
[service]
Environment="LANG=en_US.UTF-8"
当我使用 mod_wsgi 和 Apache2 设置环境时,我没有遇到任何问题。 我只需在 /etc/apache2/envars 路径中添加“export LANG='en_US.UTF-8' export LC_ALL='en_US.UTF-8'
”即可上传非-ASCII 文件名。
这一次,我使用 Nginx 和 Gunicorn 设置我的环境。但是在显示非ASCII字符的每个部分都会出现UnicodeEncoderError。
'ascii' codec can't encode characters in position 57-59: ordinal not in range(128)
我不明白为什么在 Python3 和 Django 环境中使用 'ascii' 编解码器进行编码。
我找了又找。我检查并尝试如下。
-
PostgreSQL 检查:编码 UTF8
Django 默认编码:utf-8
Ubuntu 语言环境检查:en_US.UTF-8(我也试过 'ko_KR.UTF-8',因为它有韩语错误)
已检查 python 3 sys.getdefaultencoding、sys.stdout.encoding、sys.stdin.encoding : utf-8
添加字符集 utf-8;在 /etc/nginx/sites-available/myproject 中
检查 Gunicorn 是否调用 python2 而不是 python3:使用 pip3 virtualenv 安装 gunicorn 并检查 gunicorn 文件中的“
#!/home/username/venv/bin/python3
”。
在views.py 中写入import sys reload(sys) sys.setdefaultencoding('utf-8') :我知道它可以应用于python2,不推荐使用。
我怀疑 Gunicorn 调用 python2 而不是 python3,因为 python2 也安装在我的 Ubuntu 中。如果我检查python -c 'import sys; print(sys.getdefaultencoding());'
,我可以看到'ascii'。 Python 2 有 str 和 unicode。我的结论是 Gunicorn 最后没有问题。
我仍然怀疑 Ubuntu16.04 中预装的 python 2.7。你能解释一下我错过了什么或误解吗?我知道 Python2 可能会发生 ascii 编解码器编码错误,而不是 Python3。
环境 蟒蛇 3.5 Django 1.11.1 独角兽 19.7.1 Nginx 1.10.3 Ubuntu 16.04 LTS
【问题讨论】:
也为我解决了。谢谢! 【参考方案1】:对于遇到 gunicorn 编码问题但未将其用作守护程序的人(例如,如果您在 docker 中运行 gunicorn,则只需启动命令),因此不使用此配置文件:
我正在使用 openpyxl 库生成电子表格,但在我使用 gunicorn 对服务进行 dockerized 的服务器中对其进行测试时出现此错误。在确认所有其他编码要求都很好(python、系统语言环境等)之后,很明显问题出在 gunicorn 上。 应用程序中的其他所有内容都可以正常工作,只是电子表格导出会引发此问题。
我正要尝试用其他东西替换 gunicorn,但后来我意识到 问题出在文件名上,而不是在生成文件内容的过程上。
我将生成的文件命名为“exportació”,只需将其替换为“exportacio”就可以让它像魅力一样工作。
鉴于我真的不需要文件名中的非 ascii 字符,这对我来说已经足够了。
【讨论】:
以上是关于UnicodeEncodeError [Python3/Gunicorn/Nginx/Django]的主要内容,如果未能解决你的问题,请参考以下文章
“UnicodeEncodeError:‘ascii’编解码器无法编码字符”
Python请求:UnicodeEncodeError:'charmap'编解码器无法编码字符
python3 UnicodeEncodeError错误,cx_oracle模块执行sql报错:UnicodeEncodeError: 'ascii' codec can't
UnicodeEncodeError: 'ascii' 编解码器无法编码字符 u'\u2026'