2012-03-28 41 views
2

如果我連接到Heroku的工人DYNO與heroku run(如heroku run python一個交互式Python會話),任何試圖顯示Unicode字符通過這導致了UnicodeEncodeErrorUnicode的顯示問題(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" 
? 

我認爲我做錯了/失去了一些東西,但多少有些失落,什麼,或進一步的調查線。

回答

6

我相信,這將解決您的問題:

$ heroku config:set LANG=en_US.UTF-8 
+0

......好吧,這簡直太尷尬了,謝謝! – 2012-03-29 01:00:38

+0

這是現在所有新的Heroku Python應用程序的默認設置:) – 2012-04-01 16:47:29

+0

哦,作爲buildpack的函數? – 2012-04-01 19:44:27

3

我有類似的問題。問題似乎是,當它不輸出到終端時,Python 2選擇ascii作爲打印語句的默認編碼。有這方面的方法,包括複雜但精確的方法described here。網上有類似的方法。

但是,有一個更簡單但不推薦的解決方案。這恰好是我使用的一個,其中包括在你的程序的開頭插入這樣的:

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

這迫使打印使用UTF-8默認的編碼,而不是ASCII,也應該有希望,解決您的問題。

+0

唉,你描述的解決方案似乎並不適合我,但鏈接似乎高度相關,謝謝! – 2012-03-28 13:45:08

+0

它可能無法在解釋器中工作 - 我離開我的系統並且無法檢查 - 但是如果您在腳本中嘗試它,它應該可以工作? – ShankarG 2012-03-28 15:25:28

3

無上述工作,但這一確實的:

Heroku的配置:添加PYTHONIOENCODING = UTF8

這就是答案之一這個問題在這裏:

UnicodeEncodeError only when running as a cron job

不幸的是,它不是被接受的答案,並且該問題被標記爲dup,所以我要在這裏重新發布。

+0

這是正確答案!謝謝 – 2016-06-23 15:06:50