결합 문자
앞의 기본 문자에 붙어 수정하는 문자. 일반 범주: Mn(비공백), Mc(공백 결합), Me(둘러싸기). 예: ◌́ (U+0301 결합 예음 부호).
What is a Combining Character?
A combining character is a Unicode character that has no independent visual form of its own — instead, it attaches to and modifies the preceding character (called the base character). Combining characters implement diacritical marks, tone marks, vowel signs, and other modifier symbols that, in Unicode's model, are logically separate from the letter they modify.
The key insight is that Unicode separates the identity of a character from its rendering. A letter with a diacritic can be represented either as a single precomposed code point (é = U+00E9) or as a base letter followed by a combining mark (e + ◌́ = U+0065 U+0301). Both sequences represent the same abstract character and produce the same rendered output.
How Combining Characters Work
Combining characters have a General Category of Mn (Non-spacing Mark), Mc (Spacing Mark), or Me (Enclosing Mark). Non-spacing marks are the most common — they occupy zero advance width and position themselves relative to the base character's glyph using the font's anchor points.
When a text shaping engine encounters a base character followed by one or more combining marks, it: 1. Retrieves the base glyph from the font 2. Positions each combining glyph at the appropriate anchor (top, bottom, left, right) 3. Renders them as a single grapheme cluster
Multiple combining characters can stack on a single base:
a + ◌̂ + ◌̄ = â̄ (a with circumflex and macron)
Unicode defines a canonical ordering for combining marks based on their Combining Class value (0–255). Marks with lower combining class values (e.g., below-base nuktas) appear before marks with higher values (e.g., above-base accents) in normalized text.
Important Combining Character Ranges
| Range | Name | Contents |
|---|---|---|
| U+0300–U+036F | Combining Diacritical Marks | Accents, umlauts, tildes |
| U+0591–U+05C7 | Hebrew Cantillation/Vowels | Nikud, cantillation marks |
| U+064B–U+065F | Arabic Diacritics | Harakat (vowel marks) |
| U+1AB0–U+1AFF | Combining Diacritical Marks Extended | Extended phonetic use |
| U+1DC0–U+1DFF | Combining Diacritical Marks Supplement | Additional marks |
| U+20D0–U+20FF | Combining Diacritical Marks for Symbols | Used with math symbols |
Grapheme Clusters
A base character plus all its combining marks form a grapheme cluster — the unit that users perceive as a single character. Programming languages must account for this:
import unicodedata
# "e" + combining acute = é
s = "e\u0301"
print(len(s)) # 2 (two code points)
print(s) # é (looks like 1 character)
# Precomposed é
s2 = "\u00e9"
print(len(s2)) # 1 (one code point)
print(s == s2) # False! Different code points
# Normalize to compare
import unicodedata
print(unicodedata.normalize("NFC", s) == s2) # True
JavaScript's Intl.Segmenter and Swift's String.count handle grapheme clusters correctly; many other APIs count code points instead.
Quick Facts
| Property | Value |
|---|---|
| Unicode category | Mn (Non-spacing Mark), Mc (Spacing Mark), Me (Enclosing Mark) |
| Main combining block | U+0300–U+036F (112 characters) |
| Combining class range | 0 (base) to 255 (various positions) |
| Max stacking | No hard limit; practical fonts support 2–4 layers |
| Normalization | NFC = precomposed preferred; NFD = fully decomposed |
| Grapheme cluster API | Python: regex module; JS: Intl.Segmenter; Swift: String |
| Visual indicator in charts | Often shown as ◌ (dotted circle) placeholder |
관련 용어
타이포그래피의 더 많은 용어
CSS @font-face descriptor specifying which Unicode code points a font should cover. …
Em: 폰트 크기와 같은 너비. En: Em의 절반. 엠 대시 너비, 엠 …
The mechanism by which a rendering engine substitutes glyphs from a secondary …
Modern font format developed by Microsoft and Adobe supporting up to 65,535 …
문자가 오른쪽에서 왼쪽으로 흐르는 텍스트 방향. 아랍어, 히브리어, 타아나 문자 등에서 사용되며, …
Fonts downloaded by the browser to render text, declared via CSS @font-face. …
가로 또는 세로 공간을 표현하지만 눈에 보이는 글리프가 없는 문자. 유니코드는 서로 …
폰트가 렌더링하는 문자의 시각적 표현. 하나의 문자가 여러 글리프를 가질 수 있고(합자, …
전진 너비가 0인 문자 — 렌더링에서 보이지 않지만 텍스트 동작에 영향을 줍니다. …
문장의 일부를 구분하거나 범위를 나타내는 데 사용되는 구두점. 유니코드는 하이픈(‐), 엔 대시(–), …