Unicode显示问题(UnicodeEncodeError)通过“heroku run python”

时间:2012-03-28 13:34:20

标签: python unicode heroku

如果我使用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"
?

我认为我做错了什么/遗失了什么,但是对于什么或进一步的调查有些不知所措。

3 个答案:

答案 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

不幸的是,这不是公认的答案,而且这个问题被标记为重复,所以我在这里重新发布。