2010-07-13 3 views
127

Ich verwende Python 2.6.5. Mein Code erfordert die Verwendung des Zeichens "mehr als oder gleich". Hier geht es:Python: Verwenden von .format() für eine Unicode-Escape-Zeichenfolge

>>> 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 bekomme ich diesen Fehler? Gibt es einen richtigen Weg, dies zu tun? Ich muss die .format() Funktion verwenden.

Antwort

202

Gerade die zweite Saite machen auch eine Unicode-String

>>> s = u'\u2265' 
>>> print s 
≥ 
>>> print "{0}".format(s) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
UnicodeEncodeError: 'ascii' codec can't encode character u'\u2265' in position 0: ordinal not in range(128) 
>>> print u"{0}".format(s) 
≥ 
>>> 
+32

@Kit: Wenn Sie alle Literale wollen Unicode (wie in Python 3), setzen Sie 'von __future__ Import unicode_literals' am Anfang Ihrer Quelldateien sein. – Philipp

+1

Ja, das wird Sie erreichen, wenn Sie% Formatierung gewohnt sind, da "% s"% u "\ u2265" funktioniert, aber "{}". Format (u "\ u2265") löst eine Ausnahme aus. – Hylidan

+1

was für eine einfache Sache .. was für eine schreckliche Kopfschmerzen ich bekam, bis ich dieses bisschen Erleuchtung fand .. –

54

unicode Bedürfnis unicode Formatstrings.

>>> print u'{0}'.format(s) 
≥