code: def surrogateescape_handler(exc):
      
      mystring = exc.object[exc.start:exc.end]
  
      try:
          if isinstance(exc, UnicodeDecodeError):
              # mystring is a byte-string in this case
              decoded = replace_surrogate_decode(mystring)
          elif isinstance(exc, UnicodeEncodeError):
              # In the case of u'\udcc3'.encode('ascii',
              # 'this_surrogateescape_handler'), both Python 2.x and 3.x raise an
              # exception anyway after this function is called, even though I think
              # it's doing what it should. It seems that the strict encoder is called
              # to encode the unicode string that this function returns ...
              decoded = replace_surrogate_encode(mystring, exc)
          else:
              raise exc
      except NotASurrogateError:
          raise exc
      return (decoded, exc.end)
docs: Pure Python implementation of the PEP 383: the "surrogateescape" error
      handler of Python 3. Undecodable bytes will be replaced by a Unicode
      character U+DCxx on decoding, and these are translated into the
      original bytes on encoding.