diff --git a/eopayment/common.py b/eopayment/common.py index ac37e77..a16efe5 100644 --- a/eopayment/common.py +++ b/eopayment/common.py @@ -5,6 +5,8 @@ import logging import cgi from datetime import date +import six + __all__ = ['PaymentCommon', 'URL', 'HTML', 'RANDOM', 'RECEIVED', 'ACCEPTED', 'PAID', 'ERROR', 'WAITING'] @@ -29,15 +31,27 @@ ORDERID_TRANSACTION_SEPARATOR = '!' def force_text(s, encoding='utf-8'): - if isinstance(s, unicode): + if issubclass(type(s), six.text_type): return s try: - return unicode(s, encoding) + if not issubclass(type(s), six.string_types): + if six.PY3: + if isinstance(s, bytes): + s = six.text_type(s, encoding) + else: + s = six.text_type(s) + elif hasattr(s, '__unicode__'): + s = six.text_type(s) + else: + s = six.text_type(bytes(s), encoding) + else: + s = s.decode(encoding) except UnicodeDecodeError: - return unicode(s) + return six.text_type(s, encoding, 'ignore') + return s def force_byte(s, encoding='utf-8'): - if isinstance(s, str): + if isinstance(s, bytes): return s try: return s.encode(encoding)