Patch #102940: use only printable Unicode chars in reporting
 incorrect % characters; characters outside the printable range are
 replaced with '?'
diff --git a/Objects/unicodeobject.c b/Objects/unicodeobject.c
index 4438e89..fe591b5 100644
--- a/Objects/unicodeobject.c
+++ b/Objects/unicodeobject.c
@@ -5069,7 +5069,8 @@
 		PyErr_Format(PyExc_ValueError,
 			     "unsupported format character '%c' (0x%x) "
 			     "at index %i",
-			     c, c, fmt -1 - PyUnicode_AS_UNICODE(uformat));
+			     (31<=c && c<=126) ? c : '?', 
+                             c, fmt -1 - PyUnicode_AS_UNICODE(uformat));
 		goto onError;
 	    }
 	    if (sign) {