2012-03-28 9 views
2

Wenn ich eine Verbindung zu einem Heroku Arbeiter dyno mit heroku run (zB heroku run python für eine interaktive Python-Session), jeder Versuch, Unicode-Zeichen angezeigt wird über diese in einem UnicodeEncodeErrorUnicode Probleme bei der Anzeige (UnicodeEncodeError) über „Heroku läuft Python“

Ergebnisse

Lokal:

$ 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' 
£ 

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

Nun, wenn ich heroku run bash und verwenden echo zu versuchen, die Dinge zu zeigen, scheint alles in Ordnung (außer meiner lokalen Wahl der Schrift!):

$ heroku run bash 
Running bash attached to terminal... up, run.2 
~ $ echo -e "\xa3" 
? 

Ich nehme an, ich bin etwas falsch/tut etwas fehlt, aber etwas verloren, was, oder weitere Linien der Untersuchung.

Antwort

6

Ich glaube, das Ihr Problem zu beheben:

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

... nun, das ist peinlich einfach, danke! –

+0

Dies ist die Standardeinstellung für alle neuen Heroku Python-Apps :) –

+0

Oh, als eine Funktion des Buildpacks? –

3

Ich hatte ähnliche Probleme. Das Problem scheint zu sein, dass Python 2 ascii als Standardkodierung für die print-Anweisung auswählt, wenn es nicht an ein Terminal ausgibt. Es gibt Möglichkeiten, einschließlich der komplexen, aber genauen Methode described here. Es gibt ähnliche Methoden, die im Netz verstreut sind.

Es gibt jedoch eine einfachere, aber veraltete Lösung. Dies geschieht, die ich benutze sein, die diese zum Einfügen am Anfang des Programms besteht:

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

Diese Kräfte Druck eher die utf-8 Standard-Kodierung zu verwenden, als ascii, und soll hoffentlich beheben Ihre Problem.

+0

Leider scheint die Lösung, die Sie beschreiben, nicht für mich zu funktionieren, aber der Link scheint sehr relevant zu sein, danke! –

+0

Es funktioniert möglicherweise nicht im Interpreter - ich bin von meinem System entfernt und nicht in der Lage zu überprüfen - aber es sollte funktionieren, wenn Sie es in einem Skript versuchen? – ShankarG

3

Keiner der arbeitete oben, aber das tat:

Heroku config: fügen PYTHONIOENCODING = UTF8

Dies ist eine der Antworten auf diese Frage hier:

UnicodeEncodeError only when running as a cron job

Leider war es nicht die akzeptierte Antwort und diese Frage ist als eine dup markiert, so dass ich hier umschreibe.

+0

das ist die richtige Antwort! Danke –

Verwandte Themen