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>