mirror of
https://github.com/python/cpython.git
synced 2025-12-15 21:44:50 +00:00
Add PyUnicode_DecodeLocaleAndSize() and PyUnicode_DecodeLocale()
* PyUnicode_DecodeLocaleAndSize() and PyUnicode_DecodeLocale() decode a string from the current locale encoding * _Py_char2wchar() writes an "error code" in the size argument to indicate if the function failed because of memory allocation failure or because of a decoding error. The function doesn't write the error message directly to stderr. * Fix time.strftime() (if wcsftime() is missing): decode strftime() result from the current locale encoding, not from the filesystem encoding.
This commit is contained in:
parent
3607e3de27
commit
af02e1c85a
7 changed files with 174 additions and 84 deletions
|
|
@ -699,6 +699,39 @@ Extension modules can continue using them, as they will not be removed in Python
|
|||
throughout the interpreter whenever coercion to Unicode is needed.
|
||||
|
||||
|
||||
Locale Encoding
|
||||
"""""""""""""""
|
||||
|
||||
The current locale encoding can be used to decode text from the operating
|
||||
system.
|
||||
|
||||
.. c:function:: PyObject* PyUnicode_DecodeLocaleAndSize(const char *str, Py_ssize_t len, int surrogateescape)
|
||||
|
||||
Decode a string from the current locale encoding. The decoder is strict if
|
||||
*surrogateescape* is equal to zero, otherwise it uses the
|
||||
``'surrogateescape'`` error handler (:pep:`383`) to escape undecodable
|
||||
bytes. If a byte sequence can be decoded as a surrogate character and
|
||||
*surrogateescape* is not equal to zero, the byte sequence is escaped using
|
||||
the ``'surrogateescape'`` error handler instead of being decoded. *str*
|
||||
must end with a null character but cannot contain embedded null character.
|
||||
|
||||
.. seealso::
|
||||
|
||||
Use :c:func:`PyUnicode_DecodeFSDefaultAndSize` to decode a string from
|
||||
:c:data:`Py_FileSystemDefaultEncoding` (the locale encoding read at
|
||||
Python startup).
|
||||
|
||||
.. versionadded:: 3.3
|
||||
|
||||
|
||||
.. c:function:: PyObject* PyUnicode_DecodeLocale(const char *str, int surrogateescape)
|
||||
|
||||
Similar to :c:func:`PyUnicode_DecodeLocaleAndSize`, but compute the string
|
||||
length using :c:func:`strlen`.
|
||||
|
||||
.. versionadded:: 3.3
|
||||
|
||||
|
||||
File System Encoding
|
||||
""""""""""""""""""""
|
||||
|
||||
|
|
@ -739,6 +772,13 @@ used, passing :c:func:`PyUnicode_FSDecoder` as the conversion function:
|
|||
If :c:data:`Py_FileSystemDefaultEncoding` is not set, fall back to the
|
||||
locale encoding.
|
||||
|
||||
.. seealso::
|
||||
|
||||
:c:data:`Py_FileSystemDefaultEncoding` is initialized at startup from the
|
||||
locale encoding and cannot be modified later. If you need to decode a
|
||||
string from the current locale encoding, use
|
||||
:c:func:`PyUnicode_DecodeLocaleAndSize`.
|
||||
|
||||
.. versionchanged:: 3.2
|
||||
Use ``'strict'`` error handler on Windows.
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue