On Windows, when import fails to load a dll module, the message says
"error code 193" instead of a more informative text.

It turns out that FormatMessage needs additional parameters for some error codes.
For example: 193 means "%1 is not a valid Win32 application".
Since it is impossible to know which parameter to pass, we use
FORMAT_MESSAGE_IGNORE_INSERTS to get the raw message, which is still better
than the number.

Also use the Unicode version of the API, to deal with accented letters.
diff --git a/Python/dynload_win.c b/Python/dynload_win.c
index fc641b9..2b9e0be 100644
--- a/Python/dynload_win.c
+++ b/Python/dynload_win.c
@@ -183,33 +183,35 @@
 			hDLL = LoadLibraryEx(pathname, NULL,
 					     LOAD_WITH_ALTERED_SEARCH_PATH);
 		if (hDLL==NULL){
-			char errBuf[256];
+			PyObject *message;
 			unsigned int errorCode;
 
 			/* Get an error string from Win32 error code */
-			char theInfo[256]; /* Pointer to error text
+			wchar_t theInfo[256]; /* Pointer to error text
 					      from system */
 			int theLength; /* Length of error text */
 
 			errorCode = GetLastError();
 
-			theLength = FormatMessage(
-				FORMAT_MESSAGE_FROM_SYSTEM, /* flags */
+			theLength = FormatMessageW(
+				FORMAT_MESSAGE_FROM_SYSTEM |
+				FORMAT_MESSAGE_IGNORE_INSERTS, /* flags */
 				NULL, /* message source */
 				errorCode, /* the message (error) ID */
-				0, /* default language environment */
-				(LPTSTR) theInfo, /* the buffer */
+				MAKELANGID(LANG_NEUTRAL,
+					   SUBLANG_DEFAULT),
+				           /* Default language */
+				theInfo, /* the buffer */
 				sizeof(theInfo), /* the buffer size */
 				NULL); /* no additional format args. */
 
 			/* Problem: could not get the error message.
 			   This should not happen if called correctly. */
 			if (theLength == 0) {
-				PyOS_snprintf(errBuf, sizeof(errBuf),
-				      "DLL load failed with error code %d",
-					      errorCode);
+				message = PyUnicode_FromFormat(
+					"DLL load failed with error code %d",
+					errorCode);
 			} else {
-				size_t len;
 				/* For some reason a \r\n
 				   is appended to the text */
 				if (theLength >= 2 &&
@@ -218,13 +220,16 @@
 					theLength -= 2;
 					theInfo[theLength] = '\0';
 				}
-				strcpy(errBuf, "DLL load failed: ");
-				len = strlen(errBuf);
-				strncpy(errBuf+len, theInfo,
-					sizeof(errBuf)-len);
-				errBuf[sizeof(errBuf)-1] = '\0';
+				message = PyUnicode_FromString(
+					"DLL load failed: ");
+
+				PyUnicode_AppendAndDel(&message, 
+					PyUnicode_FromUnicode(
+						theInfo, 
+						theLength));
 			}
-			PyErr_SetString(PyExc_ImportError, errBuf);
+			PyErr_SetObject(PyExc_ImportError, message);
+			Py_XDECREF(message);
 			return NULL;
 		} else {
 			char buffer[256];