Я использую Python 2.6.5. Мой код требует использования знака «больше или равно». Здесь это идет:
>>> 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)`
Почему я получаю эту ошибку? Есть ли правильный способ сделать это? Мне нужно использовать .format()
функцию.
python
string
unicode
python-2.x
Комплект
источник
источник
from __future__ import unicode_literals
в начало ваших исходных файлов.unicode
нужноunicode
форматировать строки.источник
Немного больше информации о том , почему это происходит.
работает, потому что
print
автоматически использует системную кодировку для вашей среды, которая, вероятно, была установлена в UTF-8. (Вы можете проверить, делаяimport sys; print sys.stdout.encoding
)>>> print "{0}".format(s)
терпит неудачу, потому что
format
пытается соответствовать кодировке типа, к которому он вызывается (я не смог найти документацию по этому вопросу, но это поведение я заметил). Поскольку строковые литералы являются байтовыми строками, закодированными как ASCII в Python 2, онformat
пытается кодироватьs
как ASCII, что затем приводит к этому исключению. Заметим:Вот почему в основном эти подходы работают:
источник