|
import six
|
|
|
|
def str_to_unicode(text, encoding=None, errors='strict'):
|
|
if encoding is None:
|
|
encoding = 'utf-8'
|
|
if isinstance(text, bytes):
|
|
return text.decode(encoding, errors)
|
|
return text
|
|
|
|
def unicode_to_str(text, encoding=None, errors='strict'):
|
|
if encoding is None:
|
|
encoding = 'utf-8'
|
|
if isinstance(text, six.text_type):
|
|
return text.encode(encoding, errors)
|
|
return text
|
|
|
|
def to_unicode(text, encoding=None, errors='strict'):
|
|
"""Return the unicode representation of a bytes object `text`. If `text`
|
|
is already an unicode object, return it as-is."""
|
|
if isinstance(text, six.text_type):
|
|
return text
|
|
if not isinstance(text, (bytes, six.text_type)):
|
|
raise TypeError('to_unicode must receive a bytes, str or unicode '
|
|
'object, got %s' % type(text).__name__)
|
|
if encoding is None:
|
|
encoding = 'utf-8'
|
|
return text.decode(encoding, errors)
|
|
|
|
def to_bytes(text, encoding=None, errors='strict'):
|
|
"""Return the binary representation of `text`. If `text`
|
|
is already a bytes object, return it as-is."""
|
|
if isinstance(text, bytes):
|
|
return text
|
|
if not isinstance(text, six.string_types):
|
|
raise TypeError('to_bytes must receive a unicode, str or bytes '
|
|
'object, got %s' % type(text).__name__)
|
|
if encoding is None:
|
|
encoding = 'utf-8'
|
|
return text.encode(encoding, errors)
|
|
|
|
def to_native_str(text, encoding=None, errors='strict'):
|
|
""" Return str representation of `text`
|
|
(bytes in Python 2.x and unicode in Python 3.x). """
|
|
if six.PY2:
|
|
return to_bytes(text, encoding, errors)
|
|
else:
|
|
return to_unicode(text, encoding, errors)
|