(Merge 3.2) Issue #16416: On Mac OS X, operating system data are now always

encoded/decoded to/from UTF-8/surrogateescape, instead of the locale encoding
(which may be ASCII if no locale environment variable is set), to avoid
inconsistencies with os.fsencode() and os.fsdecode() functions which are
already using UTF-8/surrogateescape.
This commit is contained in:
Victor Stinner 2012-12-03 12:48:53 +01:00
commit 2660e427d1
4 changed files with 65 additions and 18 deletions

View file

@ -15,10 +15,6 @@ wmain(int argc, wchar_t **argv)
}
#else
#ifdef __APPLE__
extern wchar_t* _Py_DecodeUTF8_surrogateescape(const char *s, Py_ssize_t size);
#endif
int
main(int argc, char **argv)
{
@ -45,11 +41,7 @@ main(int argc, char **argv)
oldloc = strdup(setlocale(LC_ALL, NULL));
setlocale(LC_ALL, "");
for (i = 0; i < argc; i++) {
#ifdef __APPLE__
argv_copy[i] = _Py_DecodeUTF8_surrogateescape(argv[i], strlen(argv[i]));
#else
argv_copy[i] = _Py_char2wchar(argv[i], NULL);
#endif
if (!argv_copy[i]) {
free(oldloc);
fprintf(stderr, "Fatal Python error: "