Three patches from issue #1047, by Amaury Forgeot d'Arc:

1/ getargs.diff adds the 'Z' and 'Z#' format specifiers for
PyArg_ParseTuple. They mimic z and z# for unicode strings, by accepting
a Unicode or None (in which case the Py_UNICODE* pointer is set to
NULL). With doc and tests.

2/ subprocess.diff converts file PC/_subprocess.c to unicode. We use the
Unicode version of the win32 api (and Z conversion from previous patch)

3/ stdout.diff: sys.stdout must not convert the line endings, Windows
already does it.
Without this patch, when redirecting the output of python, the file
contains \r\r\n for each line. (test_subprocess did catch this)

However, I (GvR) removed the change to _fileio.c (included in the
patches) that prevents closing file descripors < 3 from being closed;
I think that needs to be solved in a different way.
diff --git a/Python/getargs.c b/Python/getargs.c
index a0aa872..8d90111 100644
--- a/Python/getargs.c
+++ b/Python/getargs.c
@@ -921,6 +921,34 @@
 		break;
 	}
 	
+	case 'Z': {/* unicode, may be NULL (None) */
+		if (*format == '#') { /* any buffer-like object */
+			Py_UNICODE **p = va_arg(*p_va, Py_UNICODE **);
+			FETCH_SIZE;
+			
+			if (arg == Py_None) {
+				*p = 0;
+				STORE_SIZE(0);
+			}
+			else if (PyUnicode_Check(arg)) {
+				*p = PyUnicode_AS_UNICODE(arg);
+				STORE_SIZE(PyUnicode_GET_SIZE(arg));
+			}
+			format++;
+		} else {
+			Py_UNICODE **p = va_arg(*p_va, Py_UNICODE **);
+			
+			if (arg == Py_None)
+				*p = 0;
+			else if (PyUnicode_Check(arg))
+				*p = PyUnicode_AS_UNICODE(arg);
+			else
+				return converterr("string or None", 
+						  arg, msgbuf, bufsize);
+		}
+		break;
+	}
+	
 	case 'e': {/* encoded string */
 		char **buffer;
 		const char *encoding;