Замените символы, отличные от ascii, из строки юникода в Python

Как я могу заменить символы, отличные от ascii, из строки юникода в Python?

Это результат, который я вижу для данных входов:

музыка -> музыка

картон -> картон

кано -> кано

Может быть, с диктофоном, где «а» — это ключ, а «а» — значение?


person Juanjo Conti    schedule 13.09.2010    source источник
comment
возможный дубликат Что такое лучший способ удалить акценты в строке юникода python?   -  person nosklo    schedule 14.09.2010


Ответы (2)


Если все, что вы хотите сделать, это ухудшить символы с акцентом до их эквивалента без акцента:

>>> import unicodedata
>>> unicodedata.normalize('NFKD', u"m\u00fasica").encode('ascii', 'ignore')
'musica'
person llasram    schedule 13.09.2010
comment
Что делает NFKD? - person bikashg; 15.10.2019
comment
@bikashg Декомпозиция совместимости форм нормализации. Разлагает строку по совместимости, которая разлагает любые предварительно объединенные символы в эквивалентную последовательность комбинируемых символов, а также преобразует, например. лигатуры в семантически эквивалентную последовательность составляющих символов. Подробную информацию и ссылки на соответствующие стандарты. - person llasram; 16.10.2019

Теперь, просто чтобы дополнить этот ответ: может случиться так, что ваши данные не поступают в юникоде (т.е. вы читаете файл с другой кодировкой, и вы не можете добавить к строке префикс «u»). Вот фрагмент, который тоже может сработать (в основном для тех, кто читает файлы на английском языке).

import unicodedata
unicodedata.normalize('NFKD',unicode(someString,"ISO-8859-1")).encode("ascii","ignore")
person fiacobelli    schedule 09.02.2013