Py_BuildValue's 'c' code should use byte strings #5666
diff --git a/Doc/c-api/arg.rst b/Doc/c-api/arg.rst
index a554bc9..8a40f22 100644
--- a/Doc/c-api/arg.rst
+++ b/Doc/c-api/arg.rst
@@ -212,7 +212,7 @@
    :ctype:`char`.
 
 ``C`` (string of length 1) [int]
-   Covert a Python character, represented as a unicode string of length 1, to a
+   Convert a Python character, represented as a unicode string of length 1, to a
    C :ctype:`int`.
 
 ``f`` (float) [float]
@@ -511,8 +511,12 @@
       Convert a C :ctype:`Py_ssize_t` to a Python integer.
 
    ``c`` (string of length 1) [char]
-      Convert a C :ctype:`int` representing a character to a Python string of length
-      1.
+      Convert a C :ctype:`int` representing a byte to a Python byte string of
+      length 1.
+
+   ``C`` (string of length 1) [int]
+      Convert a C :ctype:`int` representing a character to Python unicode
+      string of length 1.
 
    ``d`` (float) [double]
       Convert a C :ctype:`double` to a Python floating point number.
diff --git a/Modules/_cursesmodule.c b/Modules/_cursesmodule.c
index 9bc74a6..5cb198e 100644
--- a/Modules/_cursesmodule.c
+++ b/Modules/_cursesmodule.c
@@ -890,7 +890,7 @@
     PyErr_SetString(PyCursesError, "no input");
     return NULL;
   } else if (rtn<=255)
-    return Py_BuildValue("c", rtn);
+    return Py_BuildValue("C", rtn);
   else
 #if defined(__NetBSD__)
     return PyUnicode_FromString(unctrl(rtn));
diff --git a/Modules/arraymodule.c b/Modules/arraymodule.c
index b39da8e..6dc46ad 100644
--- a/Modules/arraymodule.c
+++ b/Modules/arraymodule.c
@@ -1141,14 +1141,14 @@
 				> PY_SSIZE_T_MAX / Py_SIZE(array)) {
 			return PyErr_NoMemory();
 		}
-		result = Py_BuildValue("O(cy#)O", 
+		result = Py_BuildValue("O(Cy#)O",
 			Py_TYPE(array), 
 			array->ob_descr->typecode,
 			array->ob_item,
 			Py_SIZE(array) * array->ob_descr->itemsize,
 			dict);
 	} else {
-		result = Py_BuildValue("O(c)O", 
+		result = Py_BuildValue("O(C)O",
 			Py_TYPE(array), 
 			array->ob_descr->typecode,
 			dict);
diff --git a/Python/modsupport.c b/Python/modsupport.c
index 2531d0d..0cbc6f7 100644
--- a/Python/modsupport.c
+++ b/Python/modsupport.c
@@ -289,7 +289,7 @@
 		{
 			char p[1];
 			p[0] = (char)va_arg(*p_va, int);
-			return PyUnicode_FromStringAndSize(p, 1);
+			return PyBytes_FromStringAndSize(p, 1);
 		}
 		case 'C':
 		{