분해
문자를 구성 요소로 분해하는 매핑. 정규 분해는 의미를 보존(é → e + ◌́)하고, 호환 분해는 의미가 바뀔 수 있습니다(fi → fi).
What Is a Decomposition Mapping?
A decomposition mapping tells you how a Unicode character can be broken down into a sequence of simpler characters. There are two kinds:
- Canonical decomposition: the character is identical in meaning and rendering to its decomposed sequence. For example, U+00E9 LATIN SMALL LETTER E WITH ACUTE (é) canonically decomposes to U+0065 LATIN SMALL LETTER E + U+0301 COMBINING ACUTE ACCENT.
- Compatibility decomposition: the character is only compatible (semantically similar, possibly different appearance) with its decomposed sequence. For example, the ligature U+FB01 fi (fi) compatibility-decomposes to U+0066 f + U+0069 i, and U+00B2 ² (superscript two) decomposes to U+0032 2.
Normalization Forms
The four Unicode Normalization Forms are defined in terms of decomposition and canonical composition:
| Form | Decomposition | Composition |
|---|---|---|
| NFD | Canonical | No |
| NFC | Canonical | Yes (canonical) |
| NFKD | Compatibility | No |
| NFKC | Compatibility | Yes (canonical) |
import unicodedata
samples = [
("\u00E9", "é e+acute"), # canonical
("\u00C5", "Å A+ring"), # canonical
("\uFB01", "fi fi ligature"), # compatibility
("\u00B2", "² superscript 2"), # compatibility
("\u2126", "Ω OHM SIGN"), # canonical → U+03A9 GREEK CAPITAL OMEGA
]
for char, label in samples:
raw = unicodedata.decomposition(char)
nfd = unicodedata.normalize("NFD", char)
nfkd = unicodedata.normalize("NFKD", char)
nfc = unicodedata.normalize("NFC", nfd)
print(f" {label}")
print(f" decomposition() raw : {raw!r}")
print(f" NFD : {[f'U+{ord(c):04X}' for c in nfd]}")
print(f" NFKD : {[f'U+{ord(c):04X}' for c in nfkd]}")
print(f" NFC : {[f'U+{ord(c):04X}' for c in nfc]}")
The unicodedata.decomposition() function returns a raw string from UnicodeData.txt. A leading tag in angle brackets like <compat>, <font>, <circle>, <wide>, etc. indicates a compatibility decomposition; no tag means canonical.
Practical Implications
Search and indexing: NFKC normalization lets you match file against file or 2 against 2. Many search engines apply NFKC before indexing. Security: Compatibility decomposition can reveal confusable characters—U+2126 Ω and U+03A9 Ω look identical and are canonically equivalent, so an application that compares usernames should normalize first. Identifiers: Python 3 uses NFKC for identifier normalization (PEP 3131).
Quick Facts
| Property | Value |
|---|---|
| Unicode property name | Decomposition_Mapping |
| Short alias | dm |
| Types | Canonical, Compatibility (13 tags: <compat>, <font>, <circle>, etc.) |
| Python function | unicodedata.decomposition(char) → raw string |
| Normalization function | unicodedata.normalize(form, string) |
| Forms | NFD, NFC, NFKD, NFKC |
| Spec reference | Unicode Standard Annex #15 (UAX #15) |
관련 용어
속성의 더 많은 용어
Unicode property (UAX#11) classifying characters as Narrow, Wide, Fullwidth, Halfwidth, Ambiguous, or …
Unicode property controlling how Arabic and Syriac characters connect to adjacent characters. …
Unicode property listing all scripts that use a character, broader than the …
정규 분해 과정에서 결합 기호의 순서를 제어하는 수치 값(0~254)으로, 어떤 결합 기호를 …
마침표, 쉼표, 대시, 따옴표 등 문어를 구성하고 명료하게 하는 데 사용되는 문자. …
지원하지 않는 프로세스에서 눈에 보이는 효과 없이 무시할 수 있는 문자로, 이형 …
문자가 처음 할당된 유니코드 버전. 시스템 및 소프트웨어 버전 간의 문자 지원 …
문자를 대문자, 소문자, 제목 대문자로 변환하는 규칙. 로케일에 따라 달라질 수 있으며(터키어 …
RTL 문맥에서 글리프를 수평으로 반전해야 하는 문자. 예: ( → ), [ …
문자가 속한 문자 체계(예: 라틴, 키릴, 한자). Unicode 16.0은 168개의 문자 체계를 …