Rework previous fix slightly; the &0x20 test seems useless, and the isprint() check mustn't prevent the meta-bit check at the end
diff --git a/Lib/curses/ascii.py b/Lib/curses/ascii.py
index 08b5b79..800fd8b 100644
--- a/Lib/curses/ascii.py
+++ b/Lib/curses/ascii.py
@@ -87,13 +87,11 @@
         return _ctoi(c) | 0x80
 
 def unctrl(c):
-    if isprint(c):
-        return chr(_ctoi(c))
     bits = _ctoi(c)
     if bits == 0x7f:
         rep = "^?"
-    elif bits & 0x20:
-        rep = chr((bits & 0x7f) | 0x20)
+    elif isprint(bits & 0x7f):
+        rep = chr(bits & 0x7f)
     else:
         rep = "^" + chr(((bits & 0x7f) | 0x20) + 0x20)
     if bits & 0x80: