Change PyErr_Format() to generate a unicode string (by using
PyUnicode_FromFormatV() instead of PyString_FromFormatV()).

Change calls to PyErr_Format() to benefit from the new format
specifiers: Using %S, object instead of %s, PyString_AS_STRING(object)
with will work with unicode objects too.
diff --git a/Include/pyerrors.h b/Include/pyerrors.h
index c72a5bd..1f7b2ca 100644
--- a/Include/pyerrors.h
+++ b/Include/pyerrors.h
@@ -173,8 +173,7 @@
 	PyObject *, Py_UNICODE *);
 #endif /* Py_WIN_WIDE_FILENAMES */
 
-PyAPI_FUNC(PyObject *) PyErr_Format(PyObject *, const char *, ...)
-			Py_GCC_ATTRIBUTE((format(printf, 2, 3)));
+PyAPI_FUNC(PyObject *) PyErr_Format(PyObject *, const char *, ...);
 
 #ifdef MS_WINDOWS
 PyAPI_FUNC(PyObject *) PyErr_SetFromWindowsErrWithFilenameObject(
diff --git a/Python/ceval.c b/Python/ceval.c
index d777a3a..37659f8 100644
--- a/Python/ceval.c
+++ b/Python/ceval.c
@@ -2615,9 +2615,9 @@
 		if (argcount > co->co_argcount) {
 			if (!(co->co_flags & CO_VARARGS)) {
 				PyErr_Format(PyExc_TypeError,
-				    "%.200s() takes %s %d "
+				    "%S() takes %s %d "
 				    "%spositional argument%s (%d given)",
-				    PyString_AsString(co->co_name),
+				    co->co_name,
 				    defcount ? "at most" : "exactly",
 				    co->co_argcount,
 				    kwcount ? "non-keyword " : "",
@@ -2649,8 +2649,8 @@
 			int j;
 			if (keyword == NULL || !(PyString_Check(keyword) || PyUnicode_Check(keyword))) {
 				PyErr_Format(PyExc_TypeError,
-				    "%.200s() keywords must be strings",
-				    PyString_AsString(co->co_name));
+				    "%S() keywords must be strings",
+				    co->co_name);
 				goto fail;
 			}
 			/* XXX slow -- speed up using dictionary? */
@@ -2672,10 +2672,10 @@
 			if (j >= co->co_argcount + co->co_kwonlyargcount) {
 				if (kwdict == NULL) {
 					PyErr_Format(PyExc_TypeError,
-					    "%.200s() got an unexpected "
-					    "keyword argument '%.400s'",
-					    PyString_AsString(co->co_name),
-					    PyString_AsString(keyword));
+					    "%S() got an unexpected "
+					    "keyword argument '%S'",
+					    co->co_name,
+					    keyword);
 					goto fail;
 				}
 				PyDict_SetItem(kwdict, keyword, value);
@@ -2683,11 +2683,11 @@
 			else {
 				if (GETLOCAL(j) != NULL) {
 					PyErr_Format(PyExc_TypeError,
-					     "%.200s() got multiple "
+					     "%S() got multiple "
 					     "values for keyword "
-					     "argument '%.400s'",
-					     PyString_AsString(co->co_name),
-					     PyString_AsString(keyword));
+					     "argument '%S'",
+					     co->co_name,
+					     keyword);
 					goto fail;
 				}
 				Py_INCREF(value);
@@ -2711,10 +2711,8 @@
 					continue;
 				}
 				PyErr_Format(PyExc_TypeError,
-					"%.200s() needs "
-					"keyword-only argument %s",
-					PyString_AsString(co->co_name),
-					PyString_AsString(name));
+					"%S() needs keyword-only argument %S",
+					co->co_name, name);
 				goto fail;
 			}
 		}
@@ -2723,10 +2721,10 @@
 			for (i = argcount; i < m; i++) {
 				if (GETLOCAL(i) == NULL) {
 					PyErr_Format(PyExc_TypeError,
-					    "%.200s() takes %s %d "
+					    "%S() takes %s %d "
 					    "%spositional argument%s "
 					    "(%d given)",
-					    PyString_AsString(co->co_name),
+					    co->co_name,
 					    ((co->co_flags & CO_VARARGS) ||
 					     defcount) ? "at least"
 						       : "exactly",
@@ -2751,8 +2749,8 @@
 	else {
 		if (argcount > 0 || kwcount > 0) {
 			PyErr_Format(PyExc_TypeError,
-				     "%.200s() takes no arguments (%d given)",
-				     PyString_AsString(co->co_name),
+				     "%S() takes no arguments (%d given)",
+				     co->co_name,
 				     argcount + kwcount);
 			goto fail;
 		}
@@ -4021,9 +4019,7 @@
 
 	x = PyObject_GetAttr(v, name);
 	if (x == NULL && PyErr_ExceptionMatches(PyExc_AttributeError)) {
-		PyErr_Format(PyExc_ImportError,
-			     "cannot import name %.230s",
-			     PyString_AsString(name));
+		PyErr_Format(PyExc_ImportError, "cannot import name %S", name);
 	}
 	return x;
 }
diff --git a/Python/codecs.c b/Python/codecs.c
index ddd19359..3aa1f38 100644
--- a/Python/codecs.c
+++ b/Python/codecs.c
@@ -443,18 +443,13 @@
 {
     PyObject *type = PyObject_GetAttrString(exc, "__class__");
     if (type != NULL) {
-	PyObject *name = PyObject_GetAttrString(type, "__name__");
-	Py_DECREF(type);
-	if (name != NULL) {
-	    PyObject *string = PyObject_Str(name);
-	    Py_DECREF(name);
-	    if (string != NULL) {
-	        PyErr_Format(PyExc_TypeError,
-		    "don't know how to handle %.400s in error callback",
-		    PyString_AS_STRING(string));
-	        Py_DECREF(string);
-	    }
-	}
+        PyObject *name = PyObject_GetAttrString(type, "__name__");
+        Py_DECREF(type);
+        if (name != NULL) {
+            PyErr_Format(PyExc_TypeError,
+                         "don't know how to handle %S in error callback", name);
+            Py_DECREF(name);
+        }
     }
 }
 
diff --git a/Python/compile.c b/Python/compile.c
index ffca830..359de58 100644
--- a/Python/compile.c
+++ b/Python/compile.c
@@ -2467,9 +2467,9 @@
 			break;
 		case Del:
 			PyErr_Format(PyExc_SyntaxError,
-				     "can not delete variable '%s' referenced "
+				     "can not delete variable '%S' referenced "
 				     "in nested scope",
-				     PyString_AS_STRING(name));
+				     name);
 			Py_DECREF(mangled);
 			return 0;
 		case Param:
diff --git a/Python/errors.c b/Python/errors.c
index 4ef491f..2a84c8d 100644
--- a/Python/errors.c
+++ b/Python/errors.c
@@ -54,11 +54,9 @@
 {
 	if (exception != NULL &&
 	    !PyExceptionClass_Check(exception)) {
-		PyObject *excstr = PyObject_ReprStr8(exception);
 		PyErr_Format(PyExc_SystemError,
-			     "exception %s not a BaseException subclass",
-			     PyString_AS_STRING(excstr));
-		Py_DECREF(excstr);
+			     "exception %R not a BaseException subclass",
+			     exception);
 		return;
 	}
 	Py_XINCREF(exception);
@@ -75,7 +73,7 @@
 void
 PyErr_SetString(PyObject *exception, const char *string)
 {
-	PyObject *value = PyString_FromString(string);
+	PyObject *value = PyUnicode_FromString(string);
 	PyErr_SetObject(exception, value);
 	Py_XDECREF(value);
 }
@@ -528,7 +526,7 @@
 	va_start(vargs);
 #endif
 
-	string = PyString_FromFormatV(format, vargs);
+	string = PyUnicode_FromFormatV(format, vargs);
 	PyErr_SetObject(exception, string);
 	Py_XDECREF(string);
 	va_end(vargs);