UnicodeEncodeError when piping stdout, but not when printing directly to the console

Peter Otten __peter__ at web.de
Wed Jan 4 16:49:52 EST 2012

Adam Funk wrote:

> (I'm using Python 2.7.2+ on Ubuntu.)
> When I'm running my program in an xterm, the print command with an
> argument containing unicode works fine (it correctly detects my UTF-8
> environment).  But when I run it with a pipe or redirect to a file (|
> or >), unicode strings fail with the following (for example):
> UnicodeEncodeError: 'ascii' codec can't encode character u'\u0107' in
> position 21: ordinal not in range(128)
> How can I force python (preferably within my python program, rather
> than having to set something externally) to treat stdout as UTF-8?

$ cat force_utf8.py
# -*- coding: utf-8 -*-
import sys

if sys.stdout.encoding is None:
    import codecs
    writer = codecs.getwriter("utf-8")
    sys.stdout = writer(sys.stdout)

print u"Ähnlich üblich nötig"

$ python force_utf8.py
Ähnlich üblich nötig

$ python force_utf8.py | cat
Ähnlich üblich nötig

More information about the Python-list mailing list