Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 4 additions & 8 deletions 12 Lib/test/test_c_locale_coercion.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@
# Set the list of ways we expect to be able to ask for the "C" locale.
# 'invalid.ascii' is an invalid LOCALE name and so should get turned in to the
# default locale, which is traditionally C.
EXPECTED_C_LOCALE_EQUIVALENTS = ["C", "invalid.ascii"]
EXPECTED_C_LOCALE_EQUIVALENTS = ["C", "POSIX", "invalid.ascii"]
Comment thread
vstinner marked this conversation as resolved.

# Set our expectation for the default encoding used in the C locale
# for the filesystem encoding and the standard streams
Expand Down Expand Up @@ -55,11 +55,6 @@
# VxWorks defaults to using UTF-8 for all system interfaces
EXPECTED_C_LOCALE_STREAM_ENCODING = "utf-8"
EXPECTED_C_LOCALE_FS_ENCODING = "utf-8"
if sys.platform.startswith("linux"):
# Linux recognizes POSIX as a synonym for C. Python will always coerce
# if the locale is set to POSIX, but not all platforms will use the
# C locale encodings if POSIX is set, so we'll only test it on linux.
EXPECTED_C_LOCALE_EQUIVALENTS.append("POSIX")

# Note that the above expectations are still wrong in some cases, such as:
# * Windows when PYTHONLEGACYWINDOWSFSENCODING is set
Expand Down Expand Up @@ -467,8 +462,9 @@ def test_PYTHONCOERCECLOCALE_set_to_one(self):
loc = locale.setlocale(locale.LC_CTYPE, "")
except locale.Error as e:
self.skipTest(str(e))
if loc == "C":
self.skipTest("test requires LC_CTYPE locale different than C")
if loc in ("C", "POSIX"):
self.skipTest("test requires LC_CTYPE locale different "
"than C and POSIX")
if loc in TARGET_LOCALES :
self.skipTest("coerced LC_CTYPE locale: %s" % loc)

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
:pep:`538`: Coerce the POSIX locale to a UTF-8 based locale. Patch by Victor
Stinner.
5 changes: 4 additions & 1 deletion 5 Python/pylifecycle.c
Original file line number Diff line number Diff line change
Expand Up @@ -209,7 +209,10 @@ _Py_LegacyLocaleDetected(int warn)
* we may also want to check for that explicitly.
*/
const char *ctype_loc = setlocale(LC_CTYPE, NULL);
return ctype_loc != NULL && strcmp(ctype_loc, "C") == 0;
if (ctype_loc == NULL) {
return 0;
}
return (strcmp(ctype_loc, "C") == 0 || strcmp(ctype_loc, "POSIX") == 0);
#else
/* Windows uses code pages instead of locales, so no locale is legacy */
return 0;
Expand Down
Loading
Morty Proxy This is a proxified and sanitized view of the page, visit original site.