bpo-20180: Simplify char_converter in Argument Clinic. (GH-9828)

Fix also handling non-ascii default values.
diff --git a/Tools/clinic/clinic.py b/Tools/clinic/clinic.py
index cd492b4..b0acbcf 100755
--- a/Tools/clinic/clinic.py
+++ b/Tools/clinic/clinic.py
@@ -2562,29 +2562,14 @@
     format_unit = 'c'
     c_ignored_default = "'\0'"
 
-    # characters which need to be escaped in C code
-    _escapes = {x: r'\%d' % x for x in range(7)}
-    _escapes.update({
-        0x07: r'\a',
-        0x08: r'\b',
-        0x09: r'\t',
-        0x0A: r'\n',
-        0x0B: r'\v',
-        0x0C: r'\f',
-        0x0D: r'\r',
-        0x22: r'\"',
-        0x27: r'\'',
-        0x3F: r'\?',
-        0x5C: r'\\',
-    })
-
     def converter_init(self):
         if isinstance(self.default, self.default_type):
             if len(self.default) != 1:
                 fail("char_converter: illegal default value " + repr(self.default))
 
-            c_ord = self.default[0]
-            self.c_default = "'%s'" % self._escapes.get(c_ord, chr(c_ord))
+            self.c_default = repr(bytes(self.default))[1:]
+            if self.c_default == '"\'"':
+                self.c_default = r"'\''"
 
 
 @add_legacy_c_converter('B', bitwise=True)