Issue 32238: Handle "POSIX" in the legacy locale detection (original) (raw)

Messages (4)

msg307781 - (view)

Author: Alyssa Coghlan (ncoghlan) * (Python committer)

Date: 2017-12-07 00:28

Right now, the legacy locale detection introduced in PEP 538 doesn't trigger for "LANG=POSIX" and "LC_CTYPE=POSIX" on macOS and other *BSD systems.

This is because we're looking specifically for "C" as the response from "setlocale(LC_CTYPE, NULL)", which works on Linux (where glibc reports "C" if you configured "POSIX"), but not on *BSD systems (where POSIX and C behave the same way, but are still reported as distinct locales).

As per Jakub Wilk's comments at https://mail.python.org/pipermail/python-dev/2017-December/151105.html, this isn't right: we should allow either string to be returned from setlocale, and consider both of them as indicating a legacy locale to be coerced to an explicitly UTF-8 based one if possible.

msg307782 - (view)

Author: Alyssa Coghlan (ncoghlan) * (Python committer)

Date: 2017-12-07 00:39

Added a dependency on https://bugs.python.org/issue32002, as we should finish the test case refactoring proposed there before adjusting the POSIX locale handling on macOS and other *BSD systems.

msg307783 - (view)

Author: Alyssa Coghlan (ncoghlan) * (Python committer)

Date: 2017-12-07 00:42

Oops, I forgot I already had an open issue for this discrepancy - I just hadn't decided how to resolve it yet.

Marking as a duplicate of https://bugs.python.org/issue30672

msg354502 - (view)

Author: STINNER Victor (vstinner) * (Python committer)

Date: 2019-10-11 21:32

In Python 3.8, if the LC_CTYPE is "POSIX", the default stdio error handler is now "surrogateescape" instead of "strict", and the UTF-8 is now enabled. In short, LC_CTYPE="POSIX" now behaves as LC_CTYPE="C".

This change impacts at least FreeBSD. If I correctly, if there is no LC_ALL, LC_CTYPE or LANG environment variable on FreeBSD, the LC_CTYPE locale is "POSIX".

See bpo-34485, bpo-19977 and the "POSIX locale on FreeBSD" section of my article: https://vstinner.github.io/python3-locales-encodings.html

History

Date

User

Action

Args

2022-04-11 14:58:55

admin

set

github: 76419

2019-10-11 21:32:55

vstinner

set

messages: +

2017-12-07 11:58:32

jwilk

set

nosy: + jwilk

2017-12-07 00:42:10

ncoghlan

set

superseder: PEP 538: Unexpected locale behaviour on *BSD (including Mac OS X)
messages: +

2017-12-07 00:39:09

ncoghlan

set

dependencies: + test_c_locale_coercion fails when the default LC_CTYPE != "C"
messages: +

2017-12-07 00:28:35

ncoghlan

create