2012-03-29 3 views
26

Mein Programm arbeitet direkt in der Kommandozeile, aber wenn ich es als cron-Job laufen stürzt auf den Fehler:UnicodeEncodeError nur, wenn als cron-Job läuft

UnicodeEncodeError: 'ascii' codec can't encode character 
u'\xa7' in position 13: ordinal not in range(128) 

Es ist auf der Aussage stürzt

print title 

Warum passiert das nur, wenn die App als Cron-Job ausgeführt wird? Wie könnte das behoben werden?

versuchte ich (ohne Hilfe):

print unicode(title) 

Python ist 2.7

+1

Siehe http://stackoverflow.com/questions/492483/setting-the-correct-encoding-when-piping-stdout-in-python –

+0

Ich denke, es ist das gleiche Problem; Python 2 verwendet Unicode, wenn stdout ein Terminal ist, aber nicht, wenn es sich um eine Pipe handelt (wie in einem Cron-Job). –

Antwort

4

Abgesehen: Dies ist ein häufiges Problem; als solche ist dies wahrscheinlich eine doppelte Frage.

Die Standardcodierung unter 2.7 ist ascii.
Sie müssen eine Codierung für die Ausgabe Ihres Programms bereitstellen.
Eine gebräuchliche Codierung ist 'utf8'.

Also anstatt Sie tun würde:

print title.encode('utf8') 

hier ein Weg, um die Standard-Kodierung zu überprüfen:

import sys 

sys.getdefaultencoding() 
# -> 'ascii' 
+0

Vielen Dank für die Antwort, aber warum funktioniert das nicht nur, wenn die App als Cron-Job ausgeführt wird? – xralf

+0

... schwierig sagen basierend auf bereitgestellten Informationen. Sie können zum Beispiel verschiedene Eingaben weitergeben. Ob es funktioniert oder nicht, ist nicht das Problem. Als verantwortungsvoller Programmierer sollten Sie sich darum kümmern, dass Ihr Code mit nicht-ASCII-Zeichen arbeitet. – bernie

+0

Tatsächlich wurde die Zeichenfolge aus der SQlite-Datenbank entnommen. Es war vom Typ TEXT, also codiert als UTF-8 http://sqlite.org/datatype3.html. Vielleicht hat Python es geändert, als es mit anderen Zeichenfolgen über "% s% s"% (s1, s2) kombiniert wurde. – xralf

79

Nö, können Sie es einfacher haben. Definieren Sie einfach PYTHONIOENCODING, bevor Sie dieses Skript ausführen. Wie folgt aus:

PATH=<your path> 
[email protected] 
PYTHONIOENCODING=utf8 

* * * * * /run/your/script 
+1

der Tat diese ist die richtige Antwort. Cool! :) – mac

+14

Wenn ich könnte, würde ich dir +2 geben. Dieser Scheiß hat mit meinem Kopf gespielt! – TTT

+1

Was er gesagt hat ... hier bin ich, zwei Jahre später, und das hat viele Keyboards davor bewahrt, zerschlagen zu werden. – mudda