Character properties

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 A
  • U+4E2D → CJK UNIFIED IDEOGRAPH-4E2D
  • U+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 locl feature 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