Issue #4388: On Mac OS X, decode command line arguments from UTF-8, instead of

the locale encoding. If the LANG (and LC_ALL and LC_CTYPE) environment variable
is not set, the locale encoding is ISO-8859-1, whereas most programs (including
Python) expect UTF-8. Python already uses UTF-8 for the filesystem encoding and
to encode command line arguments on this OS.
This commit is contained in:
Victor Stinner 2010-10-20 22:58:25 +00:00
parent 073f759d65
commit f933e1ab6f
4 changed files with 160 additions and 0 deletions

View file

@ -15,6 +15,10 @@ 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)
{
@ -41,7 +45,11 @@ 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])
return 1;
argv_copy2[i] = argv_copy[i];