diff options
author | Victor Stinner <victor.stinner@gmail.com> | 2018-01-15 22:43:24 (GMT) |
---|---|---|
committer | GitHub <noreply@github.com> | 2018-01-15 22:43:24 (GMT) |
commit | b92c159efada05b3a5ff9d0dbce3fcb2334631f6 (patch) | |
tree | e0c7a7c67133cd4b7e6b17383ff69e2b7e5e11cc /Doc/c-api | |
parent | 5f959c4f9eca404b8bc4bc6348fed27c4b907b89 (diff) | |
download | cpython-b92c159efada05b3a5ff9d0dbce3fcb2334631f6.zip cpython-b92c159efada05b3a5ff9d0dbce3fcb2334631f6.tar.gz cpython-b92c159efada05b3a5ff9d0dbce3fcb2334631f6.tar.bz2 |
[3.6] bpo-32555: Fix locale encodings (#5193)
On FreeBSD and Solaris, os.strerror() now always decode the byte
string from the current locale encoding, rather than using
ASCII/surrogateescape in some cases.
Changes:
* Add _Py_DecodeLocaleEx() and _Py_EncodeLocaleEx() which has an
additional current_locale parameter.
* PyUnicode_DecodeLocale(), PyUnicode_DecodeLocaleAndSize() and
* PyUnicode_EncodeLocale() now always use the current locale
* encoding, instead of using Py_DecodeLocale()/Py_EncodeLocale().
* Document encoding in Py_DecodeLocale() and Py_EncodeLocale()
documentations.
* Add USE_FORCE_ASCII define to not define
decode_ascii_surrogateescape() on Android.
Diffstat (limited to 'Doc/c-api')
-rw-r--r-- | Doc/c-api/sys.rst | 20 | ||||
-rw-r--r-- | Doc/c-api/unicode.rst | 12 |
2 files changed, 31 insertions, 1 deletions
diff --git a/Doc/c-api/sys.rst b/Doc/c-api/sys.rst index 035cdc1..48e2b2b 100644 --- a/Doc/c-api/sys.rst +++ b/Doc/c-api/sys.rst @@ -66,9 +66,18 @@ Operating System Utilities surrogate character, escape the bytes using the surrogateescape error handler instead of decoding them. + Encoding, highest priority to lowest priority: + + * ``UTF-8`` on macOS and Android; + * ``ASCII`` if the ``LC_CTYPE`` locale is ``"C"``, + ``nl_langinfo(CODESET)`` returns the ``ASCII`` encoding (or an alias), + and :c:func:`mbstowcs` and :c:func:`wcstombs` functions use the + ``ISO-8859-1`` encoding. + * the current locale encoding (``LC_CTYPE`` locale). + Return a pointer to a newly allocated wide character string, use :c:func:`PyMem_RawFree` to free the memory. If size is not ``NULL``, write - the number of wide characters excluding the null character into ``*size`` + the number of wide characters excluding the null character into ``*size``. Return ``NULL`` on decoding error or memory allocation error. If *size* is not ``NULL``, ``*size`` is set to ``(size_t)-1`` on memory error or set to @@ -94,6 +103,15 @@ Operating System Utilities :ref:`surrogateescape error handler <surrogateescape>`: surrogate characters in the range U+DC80..U+DCFF are converted to bytes 0x80..0xFF. + Encoding, highest priority to lowest priority: + + * ``UTF-8`` on macOS and Android; + * ``ASCII`` if the ``LC_CTYPE`` locale is ``"C"``, + ``nl_langinfo(CODESET)`` returns the ``ASCII`` encoding (or an alias), + and :c:func:`mbstowcs` and :c:func:`wcstombs` functions uses the + ``ISO-8859-1`` encoding. + * the current locale encoding. + Return a pointer to a newly allocated byte string, use :c:func:`PyMem_Free` to free the memory. Return ``NULL`` on encoding error or memory allocation error diff --git a/Doc/c-api/unicode.rst b/Doc/c-api/unicode.rst index 6e91576..b9acaec 100644 --- a/Doc/c-api/unicode.rst +++ b/Doc/c-api/unicode.rst @@ -773,6 +773,12 @@ system. .. versionadded:: 3.3 + .. versionchanged:: 3.6.5 + The function now also uses the current locale encoding for the + ``surrogateescape`` error handler. Previously, :c:func:`Py_DecodeLocale` + was used for the ``surrogateescape``, and the current locale encoding was + used for ``strict``. + .. c:function:: PyObject* PyUnicode_DecodeLocale(const char *str, const char *errors) @@ -800,6 +806,12 @@ system. .. versionadded:: 3.3 + .. versionchanged:: 3.6.5 + The function now also uses the current locale encoding for the + ``surrogateescape`` error handler. Previously, :c:func:`Py_EncodeLocale` + was used for the ``surrogateescape``, and the current locale encoding was + used for ``strict``. + File System Encoding """""""""""""""""""" |