diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2018-01-15 14:58:02 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-01-15 14:58:02 (GMT) |
commit | cb064fc2321ce8673fe365e9ef60445a27657f54 (patch) | |
tree | 06356d6625f022636e22ed5e8646a3f2e36afac4 /Doc | |
parent | 7ed7aead9503102d2ed316175f198104e0cd674c (diff) | |
download | cpython-cb064fc2321ce8673fe365e9ef60445a27657f54.zip cpython-cb064fc2321ce8673fe365e9ef60445a27657f54.tar.gz cpython-cb064fc2321ce8673fe365e9ef60445a27657f54.tar.bz2 |
bpo-31900: Fix localeconv() encoding for LC_NUMERIC (#4174)
* Add _Py_GetLocaleconvNumeric() function: decode decimal_point and
thousands_sep fields of localeconv() from the LC_NUMERIC encoding,
rather than decoding from the LC_CTYPE encoding.
* Modify locale.localeconv() and "n" formatter of str.format() (for
int, float and complex to use _Py_GetLocaleconvNumeric()
internally.
Diffstat (limited to 'Doc')
-rw-r--r-- | Doc/library/locale.rst | 10 | ||||
-rw-r--r-- | Doc/library/stdtypes.rst | 14 | ||||
-rw-r--r-- | Doc/whatsnew/3.7.rst | 3 |
3 files changed, 27 insertions, 0 deletions
diff --git a/Doc/library/locale.rst b/Doc/library/locale.rst index 7da94a2..2fd44fe 100644 --- a/Doc/library/locale.rst +++ b/Doc/library/locale.rst @@ -147,6 +147,16 @@ The :mod:`locale` module defines the following exception and functions: | ``CHAR_MAX`` | Nothing is specified in this locale. | +--------------+-----------------------------------------+ + The function sets temporarily the ``LC_CTYPE`` locale to the ``LC_NUMERIC`` + locale to decode ``decimal_point`` and ``thousands_sep`` byte strings if + they are non-ASCII or longer than 1 byte, and the ``LC_NUMERIC`` locale is + different than the ``LC_CTYPE`` locale. This temporary change affects other + threads. + + .. versionchanged:: 3.7 + The function now sets temporarily the ``LC_CTYPE`` locale to the + ``LC_NUMERIC`` locale in some cases. + .. function:: nl_langinfo(option) diff --git a/Doc/library/stdtypes.rst b/Doc/library/stdtypes.rst index de2fb27..120b0d3 100644 --- a/Doc/library/stdtypes.rst +++ b/Doc/library/stdtypes.rst @@ -1599,6 +1599,20 @@ expression support in the :mod:`re` module). See :ref:`formatstrings` for a description of the various formatting options that can be specified in format strings. + .. note:: + When formatting a number (:class:`int`, :class:`float`, :class:`float` + and subclasses) with the ``n`` type (ex: ``'{:n}'.format(1234)``), the + function sets temporarily the ``LC_CTYPE`` locale to the ``LC_NUMERIC`` + locale to decode ``decimal_point`` and ``thousands_sep`` fields of + :c:func:`localeconv` if they are non-ASCII or longer than 1 byte, and the + ``LC_NUMERIC`` locale is different than the ``LC_CTYPE`` locale. This + temporary change affects other threads. + + .. versionchanged:: 3.7 + When formatting a number with the ``n`` type, the function sets + temporarily the ``LC_CTYPE`` locale to the ``LC_NUMERIC`` locale in some + cases. + .. method:: str.format_map(mapping) diff --git a/Doc/whatsnew/3.7.rst b/Doc/whatsnew/3.7.rst index 1041d31..009df38 100644 --- a/Doc/whatsnew/3.7.rst +++ b/Doc/whatsnew/3.7.rst @@ -866,6 +866,9 @@ Changes in Python behavior Changes in the Python API ------------------------- +* The :func:`locale.localeconv` function now sets temporarily the ``LC_CTYPE`` + locale to the ``LC_NUMERIC`` locale in some cases. + * The ``asyncio.windows_utils.socketpair()`` function has been removed: use directly :func:`socket.socketpair` which is available on all platforms since Python 3.5 (before, it wasn't available on Windows). |