On Tue, Oct 29, 2013 at 6:33 AM, Albert-Jan Roskam <fo...@yahoo.com> wrote:
> Why is do_setlocale=False here? Actually, what does this parameter do?
> It seems strange that a getter function has a 'set' argument.

On Windows, getpreferredencoding doesn't use setlocale. It calls
WinAPI GetACP to fetch the ANSI codepage.

On POSIX, calling setlocale(LC_CTYPE, "") ensures the locale is
initialized from the LC_* and LANG environment variables.
getpreferredencoding saves and restores the previous locale (e.g.
"C"); it isn't set permanently.

For example, in 2.x on my Debian system, calling
locale.getpreferredencoding(False) returns "ANSI_X3.4-1968" (i.e. the
"C" locale uses ASCII), while locale.getpreferredencoding(True)
returns "UTF-8".

setlocale isn't guaranteed to be thread safe, so 3.x io.TextIOWrapper
uses do_setlocale=False. That's OK; Py_Initialize in CPython 3.x has
already called setlocale(LC_CTYPE, ""). On the other hand, 2.x
io.TextIOWrapper has to use do_setlocale=True, as demonstrated by the
previous example.

> Other remark: I have not read this entire thread, but I was thinking the
> OP might use codecs.open to open the file in the correct encoding.

The OP is using 3.2.

For some time there's been talk of deprecating codecs.open in 3.x
(even the Stream* classes); see issue 8796 or PEP 400. It's still in
3.4, however.
_______________________________________________
Tutor maillist  -  Tutor@python.org
To unsubscribe or change subscription options:
https://mail.python.org/mailman/listinfo/tutor

Reply via email to