Decode given bytes using specified escaping method.
    :param byte_data: The byte-like object with bytes to decode.
    :param escape: The escape method to use.
    :param skip_printable: If True, don't escape byte_data with all 'printable ASCII' bytes. Defaults to False.
    :return: New unicode string, escaped with the specified method if needed.

def bytes_to_unicode(byte_data, escape, skip_printable=False):
    """
    Decode given bytes using specified escaping method.
    :param byte_data: The byte-like object with bytes to decode.
    :param escape: The escape method to use.
    :param skip_printable: If True, don't escape byte_data with all 'printable ASCII' bytes. Defaults to False.
    :return: New unicode string, escaped with the specified method if needed.
    """
    if isnumber(byte_data):
        if skip_printable:
            return num2unistr(byte_data)
        else:
            byte_data = num2bytes(byte_data)
    else:
        assert (isinstance(byte_data, type(b'')))
        if skip_printable and all(0x20 <= bval(ch) <= 0x7E for ch in byte_data):
            escape = STRING_ESCAPE_RAW

    if escape == STRING_ESCAPE_RAW:
        return byte_data.decode('latin-1')
    elif escape == STRING_ESCAPE_PRINT:
        return escape_ascii(byte_data)
    elif escape == STRING_ESCAPE_UTF8:
        return escape_utf8(byte_data)
    elif escape == STRING_ESCAPE_BASE64:
        return codecs.decode(base64.b64encode(byte_data), 'latin-1')
    else:
        raise UnicodeEncodeError("Unknown escape option")