code: def decode(self, a_bytes, encoding):
          
          try:
              return (a_bytes.decode(encoding), encoding)
          except Exception as e:
              ind = self.catch_position_in_UnicodeDecodeError_message(str(e))
              return (a_bytes[:ind].decode(encoding) + self.decode(a_bytes[(ind + 2):], encoding)[0],
                      encoding)
docs: A 'try as much as we can' strategy decoding method.
  
          'try as much as we can' feature:
  
          Some time most of byte are encoded correctly. So chardet is able to
          detect the encoding. But, sometime some bytes in the middle are not
          encoded correctly. So it is still unable to apply
          bytes.decode("encoding-method")
  
          Example::
  
              b"82347912350898143059043958290345" # 3059 is not right.
              # [-----Good----][-Bad][---Good---]
  
          What we do is to drop those bad encoded bytes, and try to recovery text
          as much as possible. So this method is to recursively call it self, and
          try to decode good bytes chunk, and finally concatenate them together.
  
          :param a_bytes: the bytes that encoding is unknown.
          :type a_bytes: bytes
          :param encoding: how you gonna decode a_bytes
          :type encoding: str