Używam Pythona 2.6.5. Mój kod wymaga użycia znaku „więcej niż lub równe”. Oto jest:
>>> 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)`
Dlaczego otrzymuję ten błąd? Czy jest na to właściwy sposób? Muszę użyć tej .format()
funkcji.
python
string
unicode
python-2.x
Zestaw
źródło
źródło
from __future__ import unicode_literals
na początku plików źródłowych.unicode
s potrzebująunicode
ciągów formatujących.źródło
Nieco więcej informacji o tym, dlaczego tak się dzieje.
działa, ponieważ
print
automatycznie używa kodowania systemowego dla twojego środowiska, które prawdopodobnie było ustawione na UTF-8. (Możesz sprawdzić, robiącimport sys; print sys.stdout.encoding
)>>> print "{0}".format(s)
kończy się niepowodzeniem, ponieważ
format
próbuje dopasować kodowanie do typu, do którego jest wywoływany (nie mogłem znaleźć dokumentacji na ten temat, ale zauważyłem to zachowanie). Ponieważ literały łańcuchowe są ciągami bajtów zakodowanymi jako ASCII w Pythonie 2,format
próbuje zakodowaćs
jako ASCII, co następnie skutkuje tym wyjątkiem. Przestrzegać:Dlatego w zasadzie działają te podejścia:
źródło