Ответ 1
Ваш терминал или консоль не позволяют Python знать, что он поддерживает UTF-8.
Без строки from __future__ import unicode_literals
вы создаете байтовую строку, которая содержит кодированные байты UTF-8. С помощью строки вы создаете строку unicode
.
print
должен обрабатывать эти два значения по-разному; строка байта записывается в sys.stdout
без изменений. Строка unicode
сначала кодируется в байты, а для этого Python обращается к sys.stdout.encoding
. Если ваша система неправильно сообщает Python, какой кодек поддерживает, по умолчанию используется ASCII.
Ваша система не сообщила Python, какой кодек использовать; sys.stdout.encoding
устанавливается в ASCII, а значение unicode
для печати не удалось.
Вы можете проверить это, вручную кодируя UTF-8 при печати:
# encoding: utf-8
from __future__ import unicode_literals
name = 'helló wörld from example'
print name.encode('utf8')
и вы можете воспроизвести проблему, создав литералы в формате unicode без оператора импорта from __future__
:
# encoding: utf-8
name = u'helló wörld from example'
print name
где u'..'
также является литералом в формате unicode.
Без подробностей о том, что такое ваша среда, трудно сказать, что такое решение; это очень сильно зависит от ОС и используемой консоли или терминала.