Issue 32238: Handle "POSIX" in the legacy locale detection (original) (raw)
Messages (4)
Author: Alyssa Coghlan (ncoghlan) *
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.
Author: Alyssa Coghlan (ncoghlan) *
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.
Author: Alyssa Coghlan (ncoghlan) *
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
Author: STINNER Victor (vstinner) *
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