print
ing von Unicode-Strings beruht auf sys.stdout
(die Standardausgabe des Prozesses) ein korrektes .encoding
Attribut, dass Python den Unicode-String in einen Byte-String kodieren, kann Sie den erforderlichen Druck auszuführen - und diese Einstellung ist abhängig von der Art und Weise das OS wird eingerichtet, wohin die Standardausgabe geleitet wird und so weiter.
Wenn es kein solches Attribut gibt, wird der voreingestellte Code ascii
verwendet, und wie Sie gesehen haben, liefert es oft nicht die gewünschten Ergebnisse ;-).
Sie können überprüfen getattr(sys.stdout, 'encoding', None)
, um zu sehen, ob die Codierung dort ist (wenn es ist, können Sie nur die Daumen drücken, dass es korrekt ist ... oder, vielleicht, versuchen Sie einige stark plattformspezifische Trick auf das richtige System zu erraten Kodierung zu überprüfen ;-). Wenn dies nicht der Fall ist, gibt es im Allgemeinen keine verlässliche oder plattformübergreifende Möglichkeit zu erraten, was es sein könnte. Sie könnte versuchen 'utf8'
, die universelle Codierung, die in vielen Fällen funktioniert (sicherlich mehr als ascii
tut ;-), aber es ist wirklich eine Drehung des Roulette-Rads.
Für mehr Zuverlässigkeit sollte Ihr Programm eine eigene Konfigurationsdatei haben, um zu sagen, welche Ausgabecodierung verwendet werden soll (vielleicht mit 'utf8'
nur als Standard, wenn nicht anders angegeben).
Es ist auch besser, für die Portabilität, Ihre eigene Codierung durchzuführen, das heißt, nicht
print someunicode
sondern
print someunicode.encode(thecodec)
und tatsächlich, wenn Sie eher unvollständig ausgegeben haben würden als ein Crash,
print someunicode.encode(thecodec, 'ignore')
(die einfach überspringt n on-kodierbaren Zeichen), oder, in der Regel besser,
print someunicode.encode(thecodec, 'replace')
(das Fragezeichen-Platzhalter für uncodierbarer Zeichen verwendet).
Welche Betriebssysteme und Python-Versionen laufen auf den Servern? – Puddingfox
Ubuntu 10.04 Server sowohl – Soid
und Python 2.6.5 – Soid