Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to change the stdin and stdout encoding on Python 2

Tags:

I'm using Windows and Linux machines for the same project. The default encoding for stdin on Windows is cp1252, and on Linux it is utf-8.

I would like to change everything to utf-8. Is it possible? How can I do it?

This question is about Python 2; for Python 3, see Python 3: How to specify stdin encoding

like image 288
duduklein Avatar asked Apr 29 '10 14:04

duduklein


2 Answers

You can do this by not relying on the implicit encoding when printing things. Not relying on that is a good idea in any case -- the implicit encoding is only used when printing to stdout and when stdout is connected to a terminal.

A better approach is to use unicode everywhere, and use codecs.open or codecs.getwriter everywhere. You wrap sys.stdout in an object that automatically encodes your unicode strings into UTF-8 using, for example:

sys.stdout = codecs.getwriter('utf-8')(sys.stdout) 

This will only work if you use unicode everywhere, though. So, use unicode everywhere. Really, everywhere.

like image 132
Thomas Wouters Avatar answered Sep 29 '22 19:09

Thomas Wouters


This is an old question, but just for reference.

To read UTF-8 from stdin, use:

UTF8Reader = codecs.getreader('utf8') sys.stdin = UTF8Reader(sys.stdin)  # Then, e.g.: for _ in sys.stdin:     print _.strip() 

To write UTF-8 to stdout, use:

UTF8Writer = codecs.getwriter('utf8') sys.stdout = UTF8Writer(sys.stdout)  # Then, e.g.: print 'Anything' 
like image 40
Tomasz Nguyen Avatar answered Sep 29 '22 19:09

Tomasz Nguyen