On Aug 25, 6:34 am, Nobody <nob...@nowhere.com> wrote: > The underlying OS primitive can only handle bytes. If you read or write a > (unicode) string, Python needs to know which encoding is used. For Python > file objects created by the user (via open() etc), you can specify the > encoding; for those created by the runtime (e.g. sys.stdin), Python uses > the locale's LC_CTYPE category to select an encoding. > > Data written to or read from text streams is encoded or decoded using the > stream's encoding. Filenames are encoded and decoded using the > filesystem encoding (sys.getfilesystemencoding()). Anything else uses the > default encoding (sys.getdefaultencoding()). > > In Python 3, text streams are handled using io.TextIOWrapper: > > http://docs.python.org/3.1/library/io.html#text-i-o > > This implements a stream which can read and/or write text data on top of > one which can read and/or write binary data. The sys.std{in,out,err} > streams are instances of TextIOWrapper. You can get the underlying > binary stream from the "buffer" attribute, e.g.: > > sys.stdout.buffer.write(b'hello world\n') > > If you need to force a specific encoding (e.g. if the user has specified > an encoding via a command-line option), you can detach the existing > wrapper and create a new one, e.g.: > > sys.stdout = io.TextIOWrapper(sys.stdout.detach(), encoding = > new_encoding)
Thanks for the details. -- http://mail.python.org/mailman/listinfo/python-list