diff Modules/python.c @ 65568:45079ad1e260

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.
author Victor Stinner <victor.stinner@haypocalc.com>
date Wed, 20 Oct 2010 22:58:25 +0000
parents 3794c9b50824
children 3c9232a684ae
line wrap: on
line diff
--- a/Modules/python.c	Wed Oct 20 21:56:55 2010 +0000
+++ b/Modules/python.c	Wed Oct 20 22:58:25 2010 +0000
@@ -15,6 +15,10 @@
 }
 #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 @@
     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];