Source code for tocoli.py3.enc

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from tocoli import Py
from codecs import encode as enc, decode as dec
from chardet import detect as det


[docs]def encode(input, output_encoding='utf-8', errors='strict', input_encoding='utf-8'): """Encode any string. Returns encoded 'bytes' otherwise the input.""" if isinstance(input, bytes): if input_encoding == output_encoding: return input elif input_encoding == Py.Enc.default: try: return enc(str(input, Py.Enc.default), output_encoding, errors) except UnicodeEncodeError as e: raise e except: return enc(input, output_encoding, errors) else: try: return enc(str(dec(input, input_encoding), Py.Enc.default), output_encoding, errors) except UnicodeEncodeError as e: raise e except: return enc(dec(input, input_encoding), output_encoding, errors) elif isinstance(input, str): if input_encoding == Py.Enc.default: try: return enc(input, output_encoding, errors) except UnicodeEncodeError as e: raise e except: return enc(bytes(input, Py.Enc.default), output_encoding, errors) else: return encode(enc(input, 'latin-1', errors), output_encoding, errors, input_encoding) else: return input
[docs]def decode(input, encoding='utf-8', errors='strict', detect='utf-8'): """Decode any string. Returns a decoded 'str' otherwise the input.""" if isinstance(input, bytes): try: r = dec(input, encoding, errors) except: r = dec(input, det(input)['encoding'], errors) if isinstance(r, bytes): return decode(r, detect, errors, detect) else: return r.replace('\ufeff', '', 1) elif isinstance(input, str): if encoding == Py.Enc.default: return input else: return decode(enc(input, 'latin-1'), encoding, errors, detect) else: return input