django - UnicodeEncodeError [Python3/Gunicorn/Nginx/Django]

标签 django python-3.x nginx utf-8 gunicorn

已解决

当我按照 here 中的说明进行操作时,发生此错误。 我设置了单位文件。我了解到 LAN env value 无法正确传输,并且它使用默认的 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'编解码器进行编码。

我搜索了,搜索了,搜索了。我检查并尝试如下。

  1. PostgreSQL 检查:编码 UTF8
  2. Django 默认编码:utf-8
  3. Ubuntu 区域设置检查:en_US.UTF-8(我也尝试过“ko_KR.UTF-8”,因为它在韩语方面有错误)
  4. 检查了 python 3 sys.getdefaultencoding、sys.stdout.encoding、sys.stdin.encoding:utf-8
  5. 添加字符集utf-8;在/etc/nginx/sites-available/myproject
  6. 检查 Gunicorn 是否调用 python2 而不是 python3 :使用 pip3 virtualenv 安装 Gunicorn 并检查 ' #!/home/username/venv/bin/python3 ' 在gunicorn 文件中。
  7. 在views.py中写入import sys reload(sys) sys.setdefaultencoding('utf-8'):我知道它可以应用于python2,但不推荐这样做。

我怀疑 Gunicorn 调用的是 python2 而不是 python3,因为我的 Ubuntu 中也安装了 python2。如果我检查python -c 'import sys; print(sys.getdefaultencoding());' ,我可以看到“ascii”。 Python 2 有 str 和 unicode。我最后得出的结论是 Gunicorn 没有问题。

我仍然对 Ubuntu16.04 中预装的 python 2.7 持怀疑态度。你能解释一下我遗漏或误解了什么吗?我知道 Python2 可能会发生 ascii 编解码器编码错误,而 Python3 则不会。

环境 Python 3.5 Django 1.11.1 枪兽19.7.1 nginx 1.10.3 Ubuntu 16.04 LTS

最佳答案

对于遇到gunicorn编码问题但不将其用作守护进程的人(例如,如果您在docker中运行gunicorn,则只需启动命令),因此不使用此配置文件:

我正在使用 openpyxl 库生成电子表格,在使用 Gunicorn 对服务进行 docker 化的服务器中测试它时出现此错误。在确认所有其他编码要求都很好(python、系统区域设置等)后,很明显问题出在gunicorn上。 应用程序中的其他所有内容都工作正常,只有电子表格导出会引发此问题。

我本来打算尝试用其他东西替换gunicorn,但后来我意识到问题出在文件名上,而不是生成文件内容的过程上。

我将生成的文件命名为“exportació”,只需将其替换为“exportacio”即可使其发挥作用。

鉴于我确实不需要文件名中的非 ASCII 字符,这对我来说已经足够了。

关于django - UnicodeEncodeError [Python3/Gunicorn/Nginx/Django],我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44920866/

相关文章:

Django:实时服务器不加载图像

python - 如何管理 Django 项目中多个应用程序的模板和静态文件?

python - 如何在Python中使用自定义字段将对象序列化为json

javascript - nginx 路由是否覆盖了最后/之后的内容

javascript - wss ://my. domain.com/sockjs/362/4q059yw7/websocket

python - Django中如何获取某个字段的总和

python - 在 Django 中是否有内置的方法来过滤给定的函数?

python - 将 new.module() 移植到 Python3

python - 使用 requests_html 时无法按预期提取结果

tomcat - xwiki 错误 : Duplicate query mapping getSpaceDocsName