summaryrefslogtreecommitdiffstats
path: root/Doc
diff options
context:
space:
mode:
authorVictor Stinner <victor.stinner@gmail.com>2018-01-15 14:58:02 (GMT)
committerGitHub <noreply@github.com>2018-01-15 14:58:02 (GMT)
commitcb064fc2321ce8673fe365e9ef60445a27657f54 (patch)
tree06356d6625f022636e22ed5e8646a3f2e36afac4 /Doc
parent7ed7aead9503102d2ed316175f198104e0cd674c (diff)
downloadcpython-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.rst10
-rw-r--r--Doc/library/stdtypes.rst14
-rw-r--r--Doc/whatsnew/3.7.rst3
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).