Вы печатаете это так:
print task1().encode('your terminal encoding here')
Вы должны быть уверены, что ваш терминал может отображать ивритские символы. Например, под полным дистрибутивом utf-8 Linux с установленными языками иврита:
print task1().encode('utf-8')
Осторожно с open
:
- в python 2.7 у вас нет параметра кодирования. Используйте модуль
codecs
.
- в python 3+ параметр кодирования - четвертый, а не третий, как вы. Вы можете иметь в виду что-то вроде
open(path, 'r', encoding='utf-8')
. Вы даже можете опустить 'r'
.
Так зачем вам использовать encode
?
Что ж, когда вы читаете файл и сообщаете Python кодировку, он возвращает объект Unicode, а не строковый объект. Например в моей системе:
>>> import codecs
>>> content = codecs.open('/etc/fstab', encoding='utf-8').read()
>>> type(content)
<type 'unicode'>
>>> type('')
<type 'str'>
>>> type(u'')
<type 'unicode'>
Вам нужно закодировать его обратно в строку, если вы хотите сделать ее печатной строкой, если она содержит символы не ascii:
>>> type(content.encode('utf-8'))
<type 'str'>
Мы используем encode
, потому что здесь мы говорим о более или менее универсальном текстовом объекте (юникод настолько универсален, насколько вы можете получить с помощью текстовых манипуляций), и вы превращаете его (кодируете) в определенное представление (utf-8) .
И нам нужно это специальное представление, потому что ваша система не знает о внутреннем Python и может печатать только символы ascii, если вы не указали кодировку. Таким образом, когда вы выводите код, вы кодируете его специально для того, чтобы ваша система могла понять. Для меня это удачно 'utf-8', так что это легко. Если вы работаете в Windows, это может быть сложно.