]> granicus.if.org Git - python/commitdiff
#1688: On Windows, the input() prompt was not correctly displayed if it
authorAmaury Forgeot d'Arc <amauryfa@gmail.com>
Sun, 21 Sep 2008 21:49:01 +0000 (21:49 +0000)
committerAmaury Forgeot d'Arc <amauryfa@gmail.com>
Sun, 21 Sep 2008 21:49:01 +0000 (21:49 +0000)
contains non-ascii characters.

Reviewed by Benjamin Peterson.

Misc/NEWS
Python/bltinmodule.c

index f4b302a845aad8314ba78223af2b50eea2ffa00b..c08c8a73954a139c805f66d42024db622ed64b1f 100644 (file)
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,9 @@ What's New in Python 3.0 release candidate 2
 Core and Builtins
 -----------------
 
+- Issue #1688: On Windows, the input() prompt was not correctly displayed if it
+  contains non-ascii characters.
+
 Library
 -------
 
index 7c08765b315f869abc1b2a1a36316b6faa6f7656..0b96dc1a1df41cdf5ba420768e31877d36ce7497 100644 (file)
@@ -1597,12 +1597,29 @@ builtin_input(PyObject *self, PyObject *args)
                else
                        Py_DECREF(tmp);
                if (promptarg != NULL) {
-                       po = PyObject_Str(promptarg);
+                       PyObject *stringpo;
+                       PyObject *stdout_encoding;
+                       stdout_encoding = PyObject_GetAttrString(fout,
+                                                                "encoding");
+                       if (stdout_encoding == NULL) {
+                               Py_DECREF(stdin_encoding);
+                               return NULL;
+                       }
+                       stringpo = PyObject_Str(promptarg);
+                       if (stringpo == NULL) {
+                               Py_DECREF(stdin_encoding);
+                               Py_DECREF(stdout_encoding);
+                               return NULL;
+                       }
+                       po = PyUnicode_AsEncodedString(stringpo,
+                               _PyUnicode_AsString(stdout_encoding), NULL);
+                       Py_DECREF(stdout_encoding);
+                       Py_DECREF(stringpo);
                        if (po == NULL) {
                                Py_DECREF(stdin_encoding);
                                return NULL;
                        }
-                       prompt = _PyUnicode_AsString(po);
+                       prompt = PyBytes_AsString(po);
                        if (prompt == NULL) {
                                Py_DECREF(stdin_encoding);
                                Py_DECREF(po);