При печати на консоль Python просматривает sys.stdout.encoding
, чтобы определить кодировку, используемую для кодирования объектов Unicode перед печатью.
При перенаправлении вывода в файл sys.stdout.encoding
имеет значение None, поэтому Python2 по умолчанию использует кодировку ascii
. (В отличие от Python3 по умолчанию utf-8
.) Это часто приводит к исключению при печати Unicode.
Вы можете избежать ошибки, явно кодировав юникод перед печатью:
print (unicode_obj.encode('utf-8'))
или вы можете переопределить sys.stdout
, чтобы весь вывод был закодирован в utf-8
:
import sys
import codecs
sys.stdout=codecs.getwriter('utf-8')(sys.stdout)
print(unicode_obj)