Поскольку кодировка вашего терминала установлена правильно, и когда вы перенаправляете в файл (или канал), кодировка устанавливается на кодировку по умолчанию (ASCII в python2.), Попробуйте print sys.stdout.encoding
в оба раза (когда вы запускаете свой скрипт кактерминал, как стандартный вывод, и когда вы перенаправите в файл), и вы увидите разницу.
Попробуйте также в командной строке:
$ python -c 'import sys; print sys.stdout.encoding;'
UTF8
$ python -c 'import sys; print sys.stdout.encoding;' | cat
None
Более подробную информацию можно найти ЗДЕСЬ :