如果我使用heroku run
连接到Heroku工作人员dyno(例如heroku run python
用于交互式Python会话),任何通过此方式显示Unicode字符的尝试都会产生UnicodeEncodeError
本地:
$ python
Python 2.7.1 (r271:86832, Jun 25 2011, 05:09:01)
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> print u'\xa3'
£
通过heroku run
:
$ heroku run python
Running python attached to terminal... up, run.1
Python 2.7.2 (default, Oct 31 2011, 16:22:04)
[GCC 4.4.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print u'\xa3'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\xa3' in position 0: ordinal not in range(128)
>>>
现在,如果我heroku run bash
并使用echo
尝试显示内容,那么一切似乎都很好(除了我当地的字体选择!):
$ heroku run bash
Running bash attached to terminal... up, run.2
~ $ echo -e "\xa3"
?
我认为我做错了什么/遗失了什么,但是对于什么或进一步的调查有些不知所措。
答案 0 :(得分:6)
我相信这会解决您的问题:
$ heroku config:set LANG=en_US.UTF-8
答案 1 :(得分:3)
我有类似的问题。问题似乎是,当它没有输出到终端时,Python 2选择ascii作为print语句的默认编码。有很多方法可以解决这个问题,包括复杂但准确的方法described here。网络上散布着类似的方法。
但是,有一个更简单但已弃用的解决方案。这恰好是我使用的,包括在程序开头插入它:
reload(sys)
sys.setdefaultencoding("utf-8")
这会强制打印使用utf-8默认编码而不是ascii,并且希望能够解决您的问题。
答案 2 :(得分:3)
以上都没有奏效,但确实如此:
heroku config:添加PYTHONIOENCODING = utf8
这是这个问题的答案之一:
UnicodeEncodeError only when running as a cron job
不幸的是,这不是公认的答案,而且这个问题被标记为重复,所以我在这里重新发布。