Сопоставление произвольных символов unicode alphanumeri c с их эквивалентами ascii - PullRequest
0 голосов
/ 13 июля 2020

Когда я встречаю произвольную строку Unicode, например, в хэштеге, я хотел бы express только его буквенно-цифровые c компоненты в строке их эквивалентов ascii. Например,

x='€???????'

будет отображаться как

x='Patriot'

Поскольку я не могу предвидеть Unicode, который может появиться в таких строках, я хотел бы, чтобы метод был как можно более общим. Есть предложения?

1 Ответ

1 голос
/ 14 июля 2020

Метод unicodedata.normalize может переводить кодовые точки Unicode в канонические значения. Затем прогоните значение через кодировку ascii, игнорируя значения, отличные от ASCII для байтовой строки, затем вернитесь через ascii декодирование, чтобы снова получить строку Unicode:

>>> x='€???????'
>>> ud.normalize('NFKC',x).encode('ascii',errors='ignore').decode('ascii')
'Patriot'

Если вам нужно удалить акценты из буквы, но по-прежнему сохраняйте базовую букву, используйте вместо этого 'NFKD'.

>>> x='€?????ô?'
>>> ud.normalize('NFKD',x).encode('ascii',errors='ignore').decode('ascii')
'Patriot'
...