@staticmethod
def remove_diacritics_and_non_ascii(entry: str) -> str:
"""Remove the diacritics and non-ASCII characters from a string.
:example:
>>> TypesDealer.remove_diacritics_and_non_ascii("éèàç")
"eeca"
>>> TypesDealer.remove_diacritics_and_non_ascii("São Tomé and Príncipe 日本語")
"Sao Tome and Principe"
:param entry: (str) The string to process
:return: (str) The string without diacritics and non-ASCII characters
"""
TypesDealer.check_types('TypesDealer.remove_diacritics_and_non_ascii', [(entry, str)])
special_char_map = {'ç': 'c', 'Ç': 'C', 'ø': 'o', 'Ø': 'O', 'œ': 'oe', 'Œ': 'OE', 'ß': 'ss', 'ñ': 'n', 'Ñ': 'N', 'á': 'a', 'Á': 'A', 'à': 'a', 'À': 'A', 'â': 'a', 'Â': 'A', 'ä': 'a', 'Ä': 'A', 'ã': 'a', 'Ã': 'A', 'å': 'a', 'Å': 'A', 'æ': 'ae', 'Æ': 'AE', 'é': 'e', 'É': 'E', 'è': 'e', 'È': 'E', 'ê': 'e', 'Ê': 'E', 'ë': 'e', 'Ë': 'E', 'í': 'i', 'Í': 'I', 'ì': 'i', 'Ì': 'I', 'î': 'i', 'Î': 'I', 'ï': 'i', 'Ï': 'I', 'ó': 'o', 'Ó': 'O', 'ò': 'o', 'Ò': 'O', 'ô': 'o', 'Ô': 'O', 'ö': 'o', 'Ö': 'O', 'õ': 'o', 'Õ': 'O', 'ú': 'u', 'Ú': 'U', 'ù': 'u', 'Ù': 'U', 'û': 'u', 'Û': 'U', 'ü': 'u', 'Ü': 'U', 'ý': 'y', 'Ý': 'Y', 'ÿ': 'y', 'Ÿ': 'Y'}
entry = ''.join((special_char_map.get(c, c) for c in entry))
entry = unicodedata.normalize('NFD', entry)
entry = ''.join((c for c in entry if unicodedata.category(c) != 'Mn'))
entry = ''.join((c for c in entry if c in string.ascii_letters or c in string.digits or c in string.punctuation or (c in string.whitespace)))
return entry