django上的语言环境和uwsgi UnicodeEncodeError

okr*_*tny 5 python django localization uwsgi

编辑:我刚刚意识到,当我不打算打印到控制该变量时,它可以工作.为什么?

我遇到了一个与使用utf字符显示字符串标签相关的问题.我在uwsgi ini文件中设置了locale env,如下所示:

env =LC_ALL=en_US.UTF-8
env =LANG=en_US.UTF-8
Run Code Online (Sandbox Code Playgroud)

在wsgi.py中:

locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')
Run Code Online (Sandbox Code Playgroud)

当我运行应用程序代码时:

print (locale.getlocale(), locale.getpreferredencoding())
print locale.getdefaultlocale()
print "option_value", option_value
label = force_text(option_label)
print 'label', label #THIS FAILS
Run Code Online (Sandbox Code Playgroud)

输出是:

(('en_US', 'UTF-8'), 'UTF-8')
('en_US', 'UTF-8')
option_value d
ERROR <stack trace>
print 'label', label
UnicodeEncodeError: 'ascii' codec can't encode character u'\u015b' in position 5: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)

当我在生产环境中通过runserver运行app时,问题不存在.Django 1.6.5 Python 2.7.6 Ubuntu 14.04 uWSGI 2.0.5.1

okr*_*tny 5

我刚刚在这里找到答案:http://chase-seibert.github.io/blog/2014/01/12/python-unicode-console-output.html

意识到控制台是导致该错误的原因,因此在 uwsgi 配置文件中导出附加环境变量可以解决该问题:env = PYTHONIOENCODING=UTF-8