Регулярное выражение Python для преобразования символов не-ascii в строке до ближайших эквивалентов ascii

Я ищу простую функцию Python, которая берет строку и возвращает аналогичную, но со всеми символами без ascii, преобразованными в их ближайший эквивалент ascii. Например, диакритические знаки и многое другое. Я предполагаю, что должен быть довольно канонический способ сделать это, и есть много связанных вопросов с stackoverflow, но я не нахожу простой ответ, поэтому, похоже, стоит отдельный вопрос.

Пример ввода / вывода:

  • Юникод не поддерживается Python
  • Python - Python 3.1 не может обрабатывать кодированные файлы UTF-16?
  • Работа с кодировкой utf-8 в источнике Python
  • Обнаружение символов в текстовом файле в Python с использованием универсального детектора кодирования (chardet)
  • Python возвращает неправильную длину строки при использовании специальных символов
  • Ansi для UTF-8 с использованием ошибки python
  • "Étienne" -> "Etienne" 

  • Как исключить строку urlencoded unicode в python?
  • Python: преобразование из ISO-8859-1 / latin1 в UTF-8
  • Соответствие строки регулярного выражения Python?
  • Удалите все специальные символы, знаки препинания и пробелы из строки
  • Как удалить символы из строки с помощью Python?
  • Как разбить целые числа и символы операторов из строки в python?
  • 4 Solutions collect form web for “Регулярное выражение Python для преобразования символов не-ascii в строке до ближайших эквивалентов ascii”

    Чтение этого вопроса заставило меня пойти искать что-то лучше.

    https://pypi.python.org/pypi/Unidecode/0.04.1

    Это именно то, о чем вы просите.

    В Python 3 и с использованием реализации регулярного выражения в PyPI:

     http://pypi.python.org/pypi/regex 

    Начиная со строки:

     >>> s = "Étienne" 

    Нормализовать до NFKD, а затем удалить диакритические знаки:

     >>> import unicodedata >>> import regex >>> regex.sub(r"\p{Mn}", "", unicodedata.normalize("NFKD", s)) 'Etienne' 

    Выполнение поиска «iconv TRANSLIT python» Я нашел: http://www.tablix.org/~avian/blog/archives/2009/01/unicode_transliteration_in_python/, который выглядит так, как будто это может быть то, что вам нужно. В комментариях есть некоторые другие идеи, которые используют стандартную библиотеку.

    Также есть http://web.archive.org/web/20070807224749/http://techxplorer.com/2006/07/18/converting-unicode-to-ascii-using-python/, который использует NFKD для получения базовых символов где возможно.

    Прочтите ответы на некоторые из повторяющихся вопросов. Трюк NFKD работает только как стриптизер с акцентом. Он не обрабатывает лигатуры и множество других латинских символов, которые не могут быть (или не разложены). Для этого необходима подготовленная таблица перевода (и намного быстрее).

    Python - лучший язык программирования в мире.