【问题标题】:Locale on django and uwsgi UnicodeEncodeErrordjango 和 uwsgi 上的语言环境 UnicodeEncodeError
【发布时间】:2014-07-22 12:51:13
【问题描述】:

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

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

env =LC_ALL=en_US.UTF-8
env =LANG=en_US.UTF-8

在 wsgi.py 中:

locale.setlocale(locale.LC_ALL, 'en_US.UTF-8')

当我运行应用代码时:

print (locale.getlocale(), locale.getpreferredencoding())
print locale.getdefaultlocale()
print "option_value", option_value
label = force_text(option_label)
print 'label', label #THIS FAILS

输出是:

(('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)

当我在生产环境中通过 runserver 运行应用程序时,问题不存在。 Django 1.6.5 Python 2.7.6 Ubuntu 14.04 uWSGI 2.0.5.1

【问题讨论】:

  • 是这个命令的错误吗? print "option_value", option_value
  • 打印“标签”,标签失败(已编辑)
  • 请回答!回答结果!

标签: python django localization uwsgi


【解决方案1】:

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

意识到这个错误是由控制台造成的,所以在 uwsgi 配置文件中导出额外的环境变量解决了这个问题:env = PYTHONIOENCODING=UTF-8

【讨论】:

  • 如果在没有配置的命令行中使用uwsgi,请添加--env=PYTHONIOENCODING=UTF-8作为参数。
【解决方案2】:

当你想使用 unicode 时,在 django 中的所有用户,比如在表单等中......你必须在你想要保存的 unicode 的前导中设置一个u!在保存 unicode 的任何地方执行此操作! 在这种情况下,我认为是(option_label)

【讨论】:

  • 标签变量的值失败,而不是字符串'label'
  • 你真的试过这个吗:print u'label', label
  • print u'label', label UnicodeEncodeError: 'ascii' codec can't encode character u'\u015b' in position 5: ordinal not in range(128)
  • 所以因为lable'option_value' django 当你想在表单等中使用uni 代码时,你必须在你想要的unicode 前面设置一个u得救!在保存 unicode 的任何地方执行此操作!
猜你喜欢
  • 2019-06-25
  • 2010-11-22
  • 2011-01-22
  • 1970-01-01
  • 2020-07-03
  • 2014-08-09
  • 2012-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多