mirror of
https://github.com/python/cpython.git
synced 2025-08-03 16:39:00 +00:00
Use locale encoding if Py_FileSystemDefaultEncoding is not set
* PyUnicode_EncodeFSDefault(), PyUnicode_DecodeFSDefaultAndSize() and PyUnicode_DecodeFSDefault() use the locale encoding instead of UTF-8 if Py_FileSystemDefaultEncoding is NULL * redecode_filenames() functions and _Py_code_object_list (issue #9630) are no more needed: remove them
This commit is contained in:
parent
6a4aff10f0
commit
f3170ccef8
8 changed files with 48 additions and 297 deletions
|
@ -1597,11 +1597,22 @@ PyObject *PyUnicode_EncodeFSDefault(PyObject *unicode)
|
|||
"surrogateescape");
|
||||
}
|
||||
else {
|
||||
/* if you change the default encoding, update also
|
||||
PyUnicode_DecodeFSDefaultAndSize() and redecode_filenames() */
|
||||
return PyUnicode_EncodeUTF8(PyUnicode_AS_UNICODE(unicode),
|
||||
PyUnicode_GET_SIZE(unicode),
|
||||
"surrogateescape");
|
||||
/* locale encoding with surrogateescape */
|
||||
wchar_t *wchar;
|
||||
char *bytes;
|
||||
PyObject *bytes_obj;
|
||||
|
||||
wchar = PyUnicode_AsWideCharString(unicode, NULL);
|
||||
if (wchar == NULL)
|
||||
return NULL;
|
||||
bytes = _Py_wchar2char(wchar);
|
||||
PyMem_Free(wchar);
|
||||
if (bytes == NULL)
|
||||
return NULL;
|
||||
|
||||
bytes_obj = PyBytes_FromString(bytes);
|
||||
PyMem_Free(bytes);
|
||||
return bytes_obj;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1769,9 +1780,22 @@ PyUnicode_DecodeFSDefaultAndSize(const char *s, Py_ssize_t size)
|
|||
"surrogateescape");
|
||||
}
|
||||
else {
|
||||
/* if you change the default encoding, update also
|
||||
PyUnicode_EncodeFSDefault() and redecode_filenames() */
|
||||
return PyUnicode_DecodeUTF8(s, size, "surrogateescape");
|
||||
/* locale encoding with surrogateescape */
|
||||
wchar_t *wchar;
|
||||
PyObject *unicode;
|
||||
|
||||
if (s[size] != '\0' || size != strlen(s)) {
|
||||
PyErr_SetString(PyExc_TypeError, "embedded NUL character");
|
||||
return NULL;
|
||||
}
|
||||
|
||||
wchar = _Py_char2wchar(s);
|
||||
if (wchar == NULL)
|
||||
return NULL;
|
||||
|
||||
unicode = PyUnicode_FromWideChar(wchar, -1);
|
||||
PyMem_Free(wchar);
|
||||
return unicode;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue