Issue #28426: Deprecated undocumented functions PyUnicode_AsEncodedObject(),
PyUnicode_AsDecodedObject(), PyUnicode_AsDecodedUnicode() and
PyUnicode_AsEncodedUnicode().
diff --git a/Doc/whatsnew/3.6.rst b/Doc/whatsnew/3.6.rst
index ba50a8e..a612d6b 100644
--- a/Doc/whatsnew/3.6.rst
+++ b/Doc/whatsnew/3.6.rst
@@ -1231,7 +1231,10 @@
Deprecated functions and types of the C API
-------------------------------------------
-* None yet.
+* Undocumented functions :c:func:`PyUnicode_AsEncodedObject`,
+ :c:func:`PyUnicode_AsDecodedObject`, :c:func:`PyUnicode_AsEncodedUnicode`
+ and :c:func:`PyUnicode_AsDecodedUnicode` are deprecated now.
+ Use :ref:`generic codec based API <codec-registry>` instead.
Deprecated features
diff --git a/Include/unicodeobject.h b/Include/unicodeobject.h
index 643d10d..5711de0 100644
--- a/Include/unicodeobject.h
+++ b/Include/unicodeobject.h
@@ -1171,22 +1171,30 @@
);
/* Decode a Unicode object unicode and return the result as Python
- object. */
+ object.
+
+ This API is DEPRECATED. The only supported standard encoding is rot13.
+ Use PyCodec_Decode() to decode with rot13 and non-standard codecs
+ that decode from str. */
PyAPI_FUNC(PyObject*) PyUnicode_AsDecodedObject(
PyObject *unicode, /* Unicode object */
const char *encoding, /* encoding */
const char *errors /* error handling */
- );
+ ) Py_DEPRECATED(3.6);
/* Decode a Unicode object unicode and return the result as Unicode
- object. */
+ object.
+
+ This API is DEPRECATED. The only supported standard encoding is rot13.
+ Use PyCodec_Decode() to decode with rot13 and non-standard codecs
+ that decode from str to str. */
PyAPI_FUNC(PyObject*) PyUnicode_AsDecodedUnicode(
PyObject *unicode, /* Unicode object */
const char *encoding, /* encoding */
const char *errors /* error handling */
- );
+ ) Py_DEPRECATED(3.6);
/* Encodes a Py_UNICODE buffer of the given size and returns a
Python string object. */
@@ -1201,13 +1209,18 @@
#endif
/* Encodes a Unicode object and returns the result as Python
- object. */
+ object.
+
+ This API is DEPRECATED. It is superceeded by PyUnicode_AsEncodedString()
+ since all standard encodings (except rot13) encode str to bytes.
+ Use PyCodec_Encode() for encoding with rot13 and non-standard codecs
+ that encode form str to non-bytes. */
PyAPI_FUNC(PyObject*) PyUnicode_AsEncodedObject(
PyObject *unicode, /* Unicode object */
const char *encoding, /* encoding */
const char *errors /* error handling */
- );
+ ) Py_DEPRECATED(3.6);
/* Encodes a Unicode object and returns the result as Python string
object. */
@@ -1219,13 +1232,17 @@
);
/* Encodes a Unicode object and returns the result as Unicode
- object. */
+ object.
+
+ This API is DEPRECATED. The only supported standard encodings is rot13.
+ Use PyCodec_Encode() to encode with rot13 and non-standard codecs
+ that encode from str to str. */
PyAPI_FUNC(PyObject*) PyUnicode_AsEncodedUnicode(
PyObject *unicode, /* Unicode object */
const char *encoding, /* encoding */
const char *errors /* error handling */
- );
+ ) Py_DEPRECATED(3.6);
/* Build an encoding map. */
diff --git a/Misc/NEWS b/Misc/NEWS
index ed6ab78..bb31f73 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -345,6 +345,13 @@
- Issue #28138: Windows ._pth file should allow import site
+C API
+-----
+
+- Issue #28426: Deprecated undocumented functions PyUnicode_AsEncodedObject(),
+ PyUnicode_AsDecodedObject(), PyUnicode_AsDecodedUnicode() and
+ PyUnicode_AsEncodedUnicode().
+
Build
-----
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 2a0dc76..134fa07 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -3237,6 +3237,11 @@
return NULL;
}
+ if (PyErr_WarnEx(PyExc_DeprecationWarning,
+ "PyUnicode_AsDecodedObject() is deprecated; "
+ "use PyCodec_Decode() to decode from str", 1) < 0)
+ return NULL;
+
if (encoding == NULL)
encoding = PyUnicode_GetDefaultEncoding();
@@ -3256,6 +3261,11 @@
goto onError;
}
+ if (PyErr_WarnEx(PyExc_DeprecationWarning,
+ "PyUnicode_AsDecodedUnicode() is deprecated; "
+ "use PyCodec_Decode() to decode from str to str", 1) < 0)
+ return NULL;
+
if (encoding == NULL)
encoding = PyUnicode_GetDefaultEncoding();
@@ -3306,6 +3316,12 @@
goto onError;
}
+ if (PyErr_WarnEx(PyExc_DeprecationWarning,
+ "PyUnicode_AsEncodedObject() is deprecated; "
+ "use PyUnicode_AsEncodedString() to encode from str to bytes "
+ "or PyCodec_Encode() for generic encoding", 1) < 0)
+ return NULL;
+
if (encoding == NULL)
encoding = PyUnicode_GetDefaultEncoding();
@@ -3628,6 +3644,11 @@
goto onError;
}
+ if (PyErr_WarnEx(PyExc_DeprecationWarning,
+ "PyUnicode_AsEncodedUnicode() is deprecated; "
+ "use PyCodec_Encode() to encode from str to str", 1) < 0)
+ return NULL;
+
if (encoding == NULL)
encoding = PyUnicode_GetDefaultEncoding();