【发布时间】: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
【问题讨论】:
-
也为我解决了。谢谢!
标签: django python-3.x nginx utf-8 gunicorn