Getting the encoding of sys.stdout and sys.stdin, and changing it properly

velle at velle at
Tue Jan 3 16:08:46 CET 2006

My headache is growing while playing arround with unicode in Python,
please help this novice. I have chosen to divide my problem into a few

Python 2.3.4 (#1, Feb  2 2005, 12:11:53)
[GCC 3.4.2 20041017 (Red Hat 3.4.2-6.fc3)] on linux2

Does " >>>print 'hello' " simply write to sys.stdout?

Exactly what does the following line return?

>>> sys.stdout.encoding

Is it the encoding of the terminal? I think not, because when I change
the encoding in my terminal the result is still the same.

Is it the encoding of the string python "hands over" to the terminal? I
think not. In the following code i am pretty confident that the second
command changes that, and still sys.stdout.encoding is the same value.

>>> import sys,codecs
>>> sys.stdout.encoding
>>> sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
>>> sys.stdout.encoding

Then what?

Does raw_input() come from sys.stdin?

The following script is not working, can you please tell me how to do
it right.

>>> import codecs,sys
>>> sys.stdout = codecs.getwriter('utf-8')(sys.stdout)
>>> sys.stdin = codecs.getreader('utf-8')(sys.stdin)
>>> x = raw_input('write this unicode letter, Turkish che, unicode 0x00E7\t')
write this unicode letter, Turkish che, unicode 0x00E7  ç
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
  File "/usr/lib/python2.3/", line 295, in readline
    return self.decode(line, self.errors)[0]
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 0-1:
unexpected end of data

When prompted, I simply enter the che with my Turkish keyboard layout.

velle, Denmark

More information about the Python-list mailing list