Heroku上Django编码错误
我看到有些话题提到可以用这个命令来解决问题
heroku config:add LANG=en_US.UTF-8
我已经试过了,但还是遇到编码问题,像这样
UnicodeEncodeError at /admin/controladoria/orgao/2/
'ascii' codec can't encode character u'\xe7' in position 23: ordinal not in range(128)
如果我尝试运行上面的命令,得到的结果是……
daniel@daniel-VirtualBox: (dev *) $ heroku config:add LANG=en_US.UTF-8
Setting config vars and restarting rocky-hollows-8072... done, v11
LANG: en_US.UTF-8
daniel@daniel-VirtualBox: (dev *) $ heroku run bash
Running `bash` attached to terminal... up, run.7893
~ $ python
Python 2.7.6 (default, Jan 16 2014, 02:39:37)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
在我的机器上,编辑了sitecustomize.py后,我得到了
Python 2.7.5 (default, Mar 11 2014, 21:42:34)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.getdefaultencoding()
'utf-8'
这应该是正常的吗?我知道如果我在sitecustomize.py里设置默认编码,就不会有问题。
那在Heroku上应该怎么处理呢?我该怎么解决这个问题,因为我不能在Heroku上更改sitecustomize。
错误日志
Traceback:
File "/app/.heroku/python/lib/python2.7/site-packages/django/core/handlers/base.py" in get_response
114. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/admin/options.py" in wrapper
432. return self.admin_site.admin_view(view)(*args, **kwargs)
File "/app/.heroku/python/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view
99. response = view_func(request, *args, **kwargs)
File "/app/.heroku/python/lib/python2.7/site-packages/django/views/decorators/cache.py" in _wrapped_view_func
52. response = view_func(request, *args, **kwargs)
File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/admin/sites.py" in inner
198. return view(request, *args, **kwargs)
File "/app/.heroku/python/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapper
29. return bound_func(*args, **kwargs)
File "/app/.heroku/python/lib/python2.7/site-packages/django/utils/decorators.py" in _wrapped_view
99. response = view_func(request, *args, **kwargs)
File "/app/.heroku/python/lib/python2.7/site-packages/django/utils/decorators.py" in bound_func
25. return func(self, *args2, **kwargs2)
File "/app/.heroku/python/lib/python2.7/site-packages/django/db/transaction.py" in inner
339. return func(*args, **kwargs)
File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/admin/options.py" in change_view
1233. self.log_change(request, new_object, change_message)
File "/app/.heroku/python/lib/python2.7/site-packages/django/contrib/admin/options.py" in log_change
614. object_repr=force_text(object),
File "/app/.heroku/python/lib/python2.7/site-packages/django/utils/encoding.py" in force_text
108. s = six.text_type(bytes(s), encoding, errors)
Exception Type: UnicodeEncodeError at /admin/controladoria/orgao/2/
Exception Value: 'ascii' codec can't encode character u'\xe7' in position 23: ordinal not in range(128)
2 个回答
0
我也遇到过同样的问题。解决我的方法是在wsgi.py文件的开头加上一些代码:
reload(sys)
sys.setdefaultencoding("utf-8")
希望这能帮助到其他人!
1
这是个老问题,但我也遇到了同样的情况。
我的解决办法是:我发现我的Heroku上使用的是Python 2.x。
一切都很顺利,因为我告诉Heroku使用Python 3.x(和我的开发环境一致)。
要做到这一点,只需在项目的根目录下添加一个runtime.txt文件,并选择正确的运行环境:
python-3.4.3
具体可以参考这里: https://devcenter.heroku.com/articles/python-runtimes