Подтвердить что ты не робот

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

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

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

"Étienne" -> "Etienne"
4b9b3361

Ответ 2

В 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'

Ответ 3

Выполнение поиска '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 для получения базовых символов, где это возможно.

Ответ 4

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