Character properties
Last updated 2026-11-02
- 字符属性
- general category
- script
- 规范化
- 字符名
- 转义
On this page
Opening a character shows a name and a set of properties. They come from the Unicode Character Database (UCD), not from any font — the same properties apply to every font that draws the character.
Name
Every assigned code point has an official name, fixed by the standard:
U+0041→LATIN CAPITAL LETTER AU+4E2D→CJK UNIFIED IDEOGRAPH-4E2DU+1F600→GRINNING FACE
The name is an identifier, not a description: GRINNING FACE is just what it is called, with no claim about how it looks.
Control characters have no name (<control> and similar are placeholders), which is why this site does not count them as assigned — see Blocks and "assigned".
general category: what kind of character
Two-letter codes in seven groups:
| Group | Prefix | Meaning |
|---|---|---|
| Letter | L |
Letters |
| Mark | M |
Marks (accents, combining signs) |
| Number | N |
Numbers |
| Punctuation | P |
Punctuation |
| Symbol | S |
Symbols |
| Separator | Z |
Separators (spaces) |
| Other | C |
Control, format, private use, unassigned |
The common subcategories:
| Code | Meaning | Example |
|---|---|---|
Lu / Ll / Lt |
Uppercase / lowercase / titlecase letter | A / a / Dž |
Lo |
Other letter (Han, kana, …) | 中 |
Lm |
Modifier letter | ʰ |
Mn |
Nonspacing mark (stacks on others) | combining accent |
Nd |
Decimal number | 7 |
Po |
Other punctuation | ! |
Zs |
Space separator | a normal space |
Cc |
Control character | newline |
Cf |
Format character (invisible) | zero-width space |
Under the block, the drawer shows a category breakdown: how many letters, punctuation marks and symbols the block holds. Blocks are mixed, so it gives a distribution rather than a fake single answer.
script: which writing system
Script says which writing system a character belongs to: Latin, Han, Hiragana, Greek, Arabic…
It is not the same as a block: Han characters are spread across many blocks (base plane, Extensions A–I, compatibility…), and a block can hold a single script.
Script matters for layout:
- line breaking (Chinese breaks between characters, Thai between words);
- font selection (fallback stacks often pick by script);
- the
loclfeature choosing forms per language (see GSUB / GPOS).
Combining class and normalisation
é can be one code point (U+00E9) or two (U+0065 + U+0301). They look identical, yet string comparison disagrees:
'é' === 'é' // false — one precomposed, one a sequence
'é'.normalize('NFC') === 'é'.normalize('NFC') // true
Unicode defines four normalisation forms (NFC / NFD / NFKC / NFKD). Before comparing user input, searching or storing in a database, normalize('NFC') is the standard move.
Combining class values decide which mark stacks on top when several are attached — important to layout engines, usually irrelevant to application code.
What the drawer shows
Clicking a character splits the right-hand panel in two.
Block section: block name, code point range, assigned / block size, category breakdown.
Character section:
- glyph preview (drawn by the loaded font, once one is loaded);
- official name (or "unknown" when unavailable);
- code point in hex;
- whether the current font has it;
- an escape table: HTML, CSS, JavaScript,
0x,\u{}, Perl, URL encoding.
The escape table looks fussy but answers a concrete question — "how do I put this into code" — especially for astral characters, where the surrogate-pair spelling (\uD83D\uDE00) is easy to get wrong by hand.
Further reading
- The Unicode Standard, chapter 4 (Character Properties)
- UAX #15 (Unicode Normalization Forms)
- Unicode:
UnicodeData.txt,extracted/DerivedName.txt