Rip out all codecs that can't work in a unicode/bytes world:
base64, uu, zlib, rot_13, hex, quopri, bz2, string_escape.

However codecs.escape_encode() and codecs.escape_decode()
still exist, as they are used for pickling str8 objects
(so those two functions can go, when the str8 type is removed).
diff --git a/Lib/pickletools.py b/Lib/pickletools.py
index 000fc6b..23c186a 100644
--- a/Lib/pickletools.py
+++ b/Lib/pickletools.py
@@ -10,6 +10,8 @@
    Print a symbolic disassembly of a pickle.
 '''
 
+import codecs
+
 __all__ = ['dis',
            'genops',
           ]
@@ -318,10 +320,8 @@
         else:
             raise ValueError("no string quotes around %r" % data)
 
-    # I'm not sure when 'string_escape' was added to the std codecs; it's
-    # crazy not to use it if it's there.
     if decode:
-        data = data.decode('string_escape')
+        data = codecs.escape_decode(data)[0]
     return data
 
 stringnl = ArgumentDescriptor(