Python Glossary English

все Python 3unicodedataфункция

unicodedata.normalize()

нормализация

Приводит строку к одной из нормальных форм Unicode — NFC, NFD, NFKC, NFKD, — чтобы одинаково выглядящие строки стали равны.

Синтаксис

unicodedata.normalize(form, unistr, /)

'й' бывает одной кодовой точкой (U+0439, форма NFC) или двумя — 'и' плюс комбинируемое бреве (форма NFD): так приходит текст из macOS, из имён файлов и копирования из PDF. Выглядят строки одинаково, но == даёт False, а len() — 1 и 2. Перед сравнением, поиском и записью в базу приводите к NFC; формы NFKC/NFKD ещё и меняют смысл ('fi²' → 'fi2'), их берут для поиска, а не для хранения.

Примеры

import unicodedata
a = 'й'  # одна кодовая точка U+0439
b = 'и\u0306'  # и + комбинируемое бреве
print(a == b, len(a), len(b))  # → False 1 2
print(unicodedata.normalize('NFC', b) == a)  # → True
print(len(unicodedata.normalize('NFD', a)))  # → 2
import unicodedata
print(unicodedata.normalize('NFKC', 'fi²'))  # → fi2 — совместимая форма меняет смысл
print(unicodedata.normalize('NFC', 'fi²'))  # → fi²

См. также

Открыть в полном глоссарииdocs.python.orgСообщить о неточности