Converts the inputted data to unicode format.
    
    :param      data | <str> || <unicode> || <iterable>
    
    :return     <unicode> || <iterable>

def toUnicode(data, encoding=DEFAULT_ENCODING):
    """
    Converts the inputted data to unicode format.
    
    :param      data | <str> || <unicode> || <iterable>
    
    :return     <unicode> || <iterable>
    """
    if isinstance(data, unicode_type):
        return data

    if isinstance(data, bytes_type):
        return unicode_type(data, encoding=encoding)

    if hasattr(data, '__iter__'):
        try:
            dict(data)
        except TypeError:
            pass
        except ValueError:
            return (toUnicode(i, encoding) for i in data)
        else:
            if hasattr(data, 'items'):
                data = data.items()

            return dict(((toUnicode(k, encoding), toUnicode(v, encoding)) for k, v in data))
    return data