Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

If a command line program is unsure of stdout's encoding, what encoding should it output?

I have a command line program written in Python, and when I pipe it through another program on the command line, sys.stdout.encoding is None. This makes sense, I suppose -- the output could be another program, or a file you're redirecting it into, or whatever, and it doesn't know what encoding is desired. But neither do I! This program will be used by many different people (humor me) in different ways. Should I play it safe and output only ascii (replacing non-ascii chars with question marks)? Or should I output UTF-8, since it's so widespread these days?

like image 224
mackstann Avatar asked Feb 16 '11 07:02

mackstann


3 Answers

I suggest you use the current locale.

Python2> import locale
Python2> locale.getpreferredencoding()
'UTF-8'

The system knows what it should be, and the other side, if it also uses the current locale, will do the right thing.

like image 100
Keith Avatar answered Sep 20 '22 21:09

Keith


You should use the value returned by locale.getpreferredencoding().

like image 24
Ignacio Vazquez-Abrams Avatar answered Sep 19 '22 21:09

Ignacio Vazquez-Abrams


if your application doesn't really deal with a whole lot of internationalisation, ascii should suffice. but if not, i'd say utf-8 or better still utf-16 should be the order of the day.

like image 21
anirvan Avatar answered Sep 19 '22 21:09

anirvan