Given a string, decode it for output to a terminal

    :param str output: A string to print to a terminal
    :param target_stream: A stream to write to, we will encode to target this stream if possible.
    :param dict translation_map: A mapping of unicode character ordinals to replacement strings.
    :return: A re-encoded string using the preferred encoding
    :rtype: str

def decode_for_output(output, target_stream=None, translation_map=None):
    """Given a string, decode it for output to a terminal

    :param str output: A string to print to a terminal
    :param target_stream: A stream to write to, we will encode to target this stream if possible.
    :param dict translation_map: A mapping of unicode character ordinals to replacement strings.
    :return: A re-encoded string using the preferred encoding
    :rtype: str
    """

    if not isinstance(output, six.string_types):
        return output
    encoding = None
    if target_stream is not None:
        encoding = getattr(target_stream, "encoding", None)
    encoding = get_output_encoding(encoding)
    try:
        output = _encode(output, encoding=encoding, translation_map=translation_map)
    except (UnicodeDecodeError, UnicodeEncodeError):
        output = to_native_string(output)
        output = _encode(
            output, encoding=encoding, errors="replace", translation_map=translation_map
        )
    return to_text(output, encoding=encoding, errors="replace")