Ich benutze Python 2.6.5. Mein Code erfordert die Verwendung des Zeichens "mehr als oder gleich". Hier kommt's:
>>> s = u'\u2265'
>>> print s
>>> ≥
>>> print "{0}".format(s)
Traceback (most recent call last):
File "<input>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2265'
in position 0: ordinal not in range(128)`
Warum erhalte ich diesen Fehler? Gibt es einen richtigen Weg, dies zu tun? Ich muss die .format()
Funktion verwenden.
from __future__ import unicode_literals
an den Anfang Ihrer Quelldateien.unicode
s benötigenunicode
Formatzeichenfolgen.quelle
Ein bisschen mehr Informationen darüber, warum das passiert.
funktioniert, weil
print
automatisch die Systemcodierung für Ihre Umgebung verwendet wird, die wahrscheinlich auf UTF-8 eingestellt war. (Sie können überprüfen, indem Sie tunimport sys; print sys.stdout.encoding
)>>> print "{0}".format(s)
schlägt fehl, weil
format
versucht wird, die Codierung des aufgerufenen Typs abzugleichen (ich konnte keine Dokumentation dazu finden, aber dies ist das Verhalten, das ich bemerkt habe). Da String-Literale Byte-Strings sind, die in Python 2 als ASCII codiert sind, wirdformat
versucht,s
als ASCII zu codieren , was dann zu dieser Ausnahme führt. Beobachten:Deshalb funktionieren diese Ansätze im Grunde:
quelle