Unicode显示问题(UnicodeEncodeError)通过;“heroku运行python”;

Unicode显示问题(UnicodeEncodeError)通过;“heroku运行python”;,python,unicode,heroku,Python,Unicode,Heroku,如果我使用Heroku run连接到Heroku worker dyno(例如,对于交互式python会话,Heroku run 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)]

如果我使用
Heroku run
连接到Heroku worker dyno(例如,对于交互式python会话,
Heroku run 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运行:

$ 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)
>>>

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

我也有类似的问题。问题似乎是,当它不输出到终端时,Python 2选择ascii作为打印语句的默认编码。有很多方法可以解决这个问题,包括复杂但精确的方法。网络上散布着类似的方法

但是,有一个更简单但不推荐的解决方案。这恰好是我使用的,它包括在程序开始时插入:

reload(sys) 
sys.setdefaultencoding("utf-8")

这迫使print使用utf-8默认编码而不是ascii编码,并且有望解决您的问题

我相信这会解决您的问题:

$ heroku config:set LANG=en_US.UTF-8
或者,如果在您尝试运行之后,heroku抱怨您需要提供应用程序参数:

$ heroku config:set LANG=en_US.UTF-8 -a <app_name>
$heroku config:set LANG=en_US.UTF-8-a

上述方法均无效,但确实有效:

heroku配置:添加PYTHONIOENCODING=utf8

以下是这个问题的答案之一:


不幸的是,这不是公认的答案,并且该问题被标记为dup,因此我在这里重新发布。

唉,您描述的解决方案似乎不适合我,但链接似乎非常相关,谢谢!它在解释器中可能不起作用-我不在我的系统中,无法检查-但如果您在脚本中尝试它,它应该会起作用?这是所有新的Heroku Python应用程序的默认设置:)哦,作为buildpack的一个功能?这非常有帮助。谢谢。
$ heroku config:set LANG=en_US.UTF-8 -a <app_name>