Korean is written in Hangul, where letters are not strung out in a line but packed into square syllable blocks. Each block has up to three parts: a leading consonant (choseong), a medial vowel (jungseong), and an optional final consonant (jongseong). This builder lets you pick each part and instantly composes the exact precomposed Unicode syllable, showing its code point — a clean way to see how Hangul’s elegant composition system works.
How it works
Unicode stores all 11,172 modern Hangul syllables in one contiguous, ordered range beginning at U+AC00 (가). Any block is computed with a single formula:
code = 0xAC00 + (initial × 21 + medial) × 28 + final
where:
- initial is the choseong index, 0–18 (19 consonants).
- medial is the jungseong index, 0–20 (21 vowels).
- final is the jongseong index, 0–27 — index 0 means no final consonant, and 1–27 are the final consonants.
Multiplying the slot counts gives 19 × 21 × 28 = 11,172 syllables, exactly the size of the Unicode block. The arithmetic means every selection maps to one unambiguous character.
The three components in detail
Choseong (초성) — initial consonant. Every Hangul syllable begins with a consonant. When a syllable starts with a vowel sound, the placeholder consonant ㅇ (ieung) fills the initial slot — so 아 (a) is actually ㅇ + ㅏ. There are 19 possible initials.
Jungseong (중성) — medial vowel. The vowel sits to the right of or below the initial consonant, depending on whether it is a horizontal or vertical vowel. There are 21 possible medials, including compound vowels like ㅘ (wa), ㅝ (wo), and ㅢ (ɰi).
Jongseong (종성) — optional final consonant. Some syllables end with a consonant (받침, batchim). There are 27 possible finals plus the empty slot. Not all consonants appear in the same form as finals — for example, ㄺ (lk cluster) is a valid final. The final consonant affects pronunciation of the following syllable through sandhi.
Worked examples
| Target syllable | Choseong | Jungseong | Jongseong | Code point |
|---|---|---|---|---|
| 가 (ga) | ㄱ (0) | ㅏ (0) | none (0) | U+AC00 |
| 나 (na) | ㄴ (2) | ㅏ (0) | none (0) | U+B098 |
| 한 (han) | ㅎ (18) | ㅏ (0) | ㄴ (4) | U+D55C |
| 글 (geul) | ㄱ (0) | ㅡ (18) | ㄹ (8) | U+AE00 |
| 봄 (bom, spring) | ㅂ (6) | ㅗ (8) | ㅁ (16) | U+BD04 |
To verify: 한 = 0xAC00 + (18 × 21 + 0) × 28 + 4 = 0xAC00 + 18 × 588 + 4 = 0xAC00 + 10584 + 4 = 0xAC00 + 10588 = 0xD55C.
Why the precomposed block matters for developers
Unicode contains both precomposed Hangul syllable blocks (U+AC00–U+D7A3) and standalone jamo characters (U+3131–U+318E and the compatibility jamo range). Text typed on a Korean keyboard always produces precomposed blocks. When comparing, searching, or indexing Korean text in software, work with the precomposed form — loose jamo sequences look different even when they represent the same syllable. The builder always outputs the precomposed block, not the loose jamo, matching what the IME produces.