]> git.ipfire.org Git - thirdparty/Python/cpython.git/commit
bpo-42236: Use UTF-8 encoding if nl_langinfo(CODESET) fails (GH-23086)
authorVictor Stinner <vstinner@python.org>
Sun, 1 Nov 2020 22:07:23 +0000 (23:07 +0100)
committerGitHub <noreply@github.com>
Sun, 1 Nov 2020 22:07:23 +0000 (23:07 +0100)
commite662c398d87f136497f8ec672e83657ae3a599e0
treecc9383c30557769a096be580b7f8f1b936565ea9
parent82458b6cdbae3b849dc11d0d7dc2ab06ef0451c4
bpo-42236: Use UTF-8 encoding if nl_langinfo(CODESET) fails (GH-23086)

If the nl_langinfo(CODESET) function returns an empty string, Python
now uses UTF-8 as the filesystem encoding.

In May 2010 (commit b744ba1d14c5487576c95d0311e357b707600b47), I
modified Python to log a warning and use UTF-8 as the filesystem
encoding (instead of None) if nl_langinfo(CODESET) returns an empty
string.

In August 2020 (commit 94908bbc1503df830d1d615e7b57744ae1b41079), I
modified Python startup to fail with a fatal error and a specific
error message if nl_langinfo(CODESET) returns an empty string. The
intent was to prevent guessing the encoding and also investigate user
configuration where this case happens.

In 10 years (2010 to 2020), I saw zero user report about the error
message related to nl_langinfo(CODESET) returning an empty string.

Today, UTF-8 became the defacto standard and it's safe to make the
assumption that the user expects UTF-8. For example,
nl_langinfo(CODESET) can return an empty string on macOS if the
LC_CTYPE locale is not supported, and UTF-8 is the default encoding
on macOS.

While this change is likely to not affect anyone in practice, it
should make UTF-8 lover happy ;-)

Rewrite also the documentation explaining how Python selects the
filesystem encoding and error handler.
Doc/c-api/init_config.rst
Doc/library/sys.rst
Include/cpython/initconfig.h
Include/internal/pycore_fileutils.h
Include/pyport.h
Misc/NEWS.d/next/Core and Builtins/2020-11-01-21-21-38.bpo-42236.MPx-NK.rst [new file with mode: 0644]
Python/fileutils.c
Python/initconfig.c