Enable shortcuts for common encodings in PyUnicode_AsEncodedString() for any

error handler, not only the default error handler (strict)
This commit is contained in:
Victor Stinner 2010-05-15 13:14:32 +00:00
parent b744ba1d14
commit 59e62db0a3
2 changed files with 33 additions and 22 deletions

View file

@ -12,6 +12,9 @@ What's New in Python 3.2 Alpha 1?
Core and Builtins Core and Builtins
----------------- -----------------
- Enable shortcuts for common encodings in PyUnicode_AsEncodedString() for any
error handler, not only the default error handler (strict)
- Issue #8610: Load file system codec at startup, and display a fatal error on - Issue #8610: Load file system codec at startup, and display a fatal error on
failure. Set the file system encoding to utf-8 (instead of None) if getting failure. Set the file system encoding to utf-8 (instead of None) if getting
the locale encoding failed, or if nl_langinfo(CODESET) function is missing. the locale encoding failed, or if nl_langinfo(CODESET) function is missing.

View file

@ -1476,17 +1476,24 @@ PyObject *PyUnicode_AsEncodedString(PyObject *unicode,
encoding = PyUnicode_GetDefaultEncoding(); encoding = PyUnicode_GetDefaultEncoding();
/* Shortcuts for common default encodings */ /* Shortcuts for common default encodings */
if (errors == NULL) {
if (strcmp(encoding, "utf-8") == 0) if (strcmp(encoding, "utf-8") == 0)
return PyUnicode_AsUTF8String(unicode); return PyUnicode_EncodeUTF8(PyUnicode_AS_UNICODE(unicode),
PyUnicode_GET_SIZE(unicode),
errors);
else if (strcmp(encoding, "latin-1") == 0) else if (strcmp(encoding, "latin-1") == 0)
return PyUnicode_AsLatin1String(unicode); return PyUnicode_EncodeLatin1(PyUnicode_AS_UNICODE(unicode),
PyUnicode_GET_SIZE(unicode),
errors);
#if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T) #if defined(MS_WINDOWS) && defined(HAVE_USABLE_WCHAR_T)
else if (strcmp(encoding, "mbcs") == 0) else if (strcmp(encoding, "mbcs") == 0)
return PyUnicode_AsMBCSString(unicode); return PyUnicode_EncodeMBCS(PyUnicode_AS_UNICODE(unicode),
PyUnicode_GET_SIZE(unicode),
errors);
#endif #endif
else if (strcmp(encoding, "ascii") == 0) else if (strcmp(encoding, "ascii") == 0)
return PyUnicode_AsASCIIString(unicode); return PyUnicode_EncodeASCII(PyUnicode_AS_UNICODE(unicode),
PyUnicode_GET_SIZE(unicode),
errors);
/* During bootstrap, we may need to find the encodings /* During bootstrap, we may need to find the encodings
package, to load the file system encoding, and require the package, to load the file system encoding, and require the
file system encoding in order to load the encodings file system encoding in order to load the encodings
@ -1499,8 +1506,9 @@ PyObject *PyUnicode_AsEncodedString(PyObject *unicode,
else if (Py_FileSystemDefaultEncoding && else if (Py_FileSystemDefaultEncoding &&
strcmp(encoding, Py_FileSystemDefaultEncoding) == 0 && strcmp(encoding, Py_FileSystemDefaultEncoding) == 0 &&
!PyThreadState_GET()->interp->codecs_initialized) !PyThreadState_GET()->interp->codecs_initialized)
return PyUnicode_AsASCIIString(unicode); return PyUnicode_EncodeASCII(PyUnicode_AS_UNICODE(unicode),
} PyUnicode_GET_SIZE(unicode),
errors);
/* Encode via the codec registry */ /* Encode via the codec registry */
v = PyCodec_Encode(unicode, encoding, errors); v = PyCodec_Encode(unicode, encoding, errors);