Bug #1421664: Set sys.stderr.encoding
diff --git a/Misc/NEWS b/Misc/NEWS
index cb99814..70ed7ca 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -12,6 +12,9 @@
 Core and builtins
 -----------------
 
+- Bug #1421664: sys.stderr.encoding is now set to the same value as
+  sys.stdout.encoding.
+
 - __import__ accepts keyword arguments.
 
 - Patch #1460496: round() now accepts keyword arguments.
diff --git a/Python/pythonrun.c b/Python/pythonrun.c
index 4c8c517..1aa6930 100644
--- a/Python/pythonrun.c
+++ b/Python/pythonrun.c
@@ -281,6 +281,16 @@
 		}
 		Py_XDECREF(sys_isatty);
 
+		sys_stream = PySys_GetObject("stderr");
+		sys_isatty = PyObject_CallMethod(sys_stream, "isatty", "");
+		if (!sys_isatty)
+			PyErr_Clear();
+		if(sys_isatty && PyObject_IsTrue(sys_isatty)) {
+			if (!PyFile_SetEncoding(sys_stream, codeset))
+				Py_FatalError("Cannot set codeset of stderr");
+		}
+		Py_XDECREF(sys_isatty);
+
 		if (!Py_FileSystemDefaultEncoding)
 			Py_FileSystemDefaultEncoding = codeset;
 		else
diff --git a/Python/sysmodule.c b/Python/sysmodule.c
index dfa6ac8..4a52742 100644
--- a/Python/sysmodule.c
+++ b/Python/sysmodule.c
@@ -1069,6 +1069,11 @@
 		if (!PyFile_SetEncoding(sysout, buf))
 			return NULL;
 	}
+	if(isatty(_fileno(stderr))) {
+		sprintf(buf, "cp%d", GetConsoleOutputCP());
+		if (!PyFile_SetEncoding(syserr, buf))
+			return NULL;
+	}
 #endif
 
 	PyDict_SetItemString(sysdict, "stdin", sysin);