Skip to content

Unicode blocks

Unicode divides its code space into named blocks, each a contiguous range reserved for one script or one family of symbols. Knowing which block a character lives in is what turns a mystery — why did this paste break, why does this regex miss it — into an answerable question.

The block names are identifiers, not descriptions: they are used verbatim in a regex as \p{Block=Cyrillic} and in every Unicode data file, so they stay in English in every language. What is translated is the sentence next to them.

This is a curated selection rather than all of the roughly 340 blocks — the ones that come up when working with text. The ASCII table covers the first block in full detail; this page starts where that one stops.

Latin

5

Latin is spread over several blocks, which is why matching it by block never quite works.

RangeBlockWhat is in itSample
U+0000–U+007FBasic LatinASCII, unchanged: Latin letters, digits, punctuation, control codesA z 0 ?
U+0080–U+00FFLatin-1 SupplementWestern European accents, plus £ § × ÷ and the non-breaking spaceé ñ ü ×
U+0100–U+017FLatin Extended-ACentral and Eastern European accents — č, ł, ő, șč ł ő š
U+0180–U+024FLatin Extended-BAdditional letters for African and phonetic orthographiesƒ ǎ ȳ
U+1E00–U+1EFFLatin Extended AdditionalVietnamese and other multi-accented Latin lettersạ ế ṛ

Combining marks and modifiers

4

These attach to the character before them and have no width of their own.

RangeBlockWhat is in itSample
U+0300–U+036FCombining Diacritical MarksAccents applied to the preceding characterThe second, decomposed way to write é. Normalise to NFC to collapse it.◌́ ◌̈ ◌̌
U+02B0–U+02FFSpacing Modifier LettersSuperscript letters and IPA stress and tone marksʰ ˈ ˚
U+FE00–U+FE0FVariation SelectorsInvisible selectors choosing text or emoji presentationVS16 is what turns ✔ into an emoji. Invisible, but it counts.
U+FE20–U+FE2FCombining Half MarksHalves of marks spanning two characters

Other scripts

8
RangeBlockWhat is in itSample
U+0370–U+03FFGreek and CopticGreek, and the Coptic letters that share its blockα Ω π
U+0400–U+04FFCyrillicRussian, Ukrainian, Serbian, Bulgarian and related alphabetsд Я ж
U+0590–U+05FFHebrewHebrew letters, vowel points and cantillation marksא ש
U+0600–U+06FFArabicArabic letters, in their isolated formsا ب ي
U+0900–U+097FDevanagariHindi, Sanskrit, Marathi and related languagesक ह
U+0E00–U+0E7FThaiThai consonants, vowels and tone marksก ท
U+10A0–U+10FFGeorgianGeorgian Mkhedruliა ბ
U+1F00–U+1FFFGreek ExtendedPolytonic Greek — the accents of classical textsᾰ ῶ

Punctuation and numbers

5

The source of most invisible characters that survive a copy-paste.

RangeBlockWhat is in itSample
U+2000–U+206FGeneral PunctuationDashes, curly quotes, ellipsis — and most invisible spacesU+200B zero-width space and U+2060 word joiner live here.– — “ ” …
U+2070–U+209FSuperscripts and SubscriptsSuperscript and subscript digits and letters⁰ ⁴ ₂
U+20A0–U+20CFCurrency SymbolsCurrency signs Latin-1 has no room for — €, ₴, ₹, ₺€ ₴ ₺
U+2100–U+214FLetterlike SymbolsSymbols built from letters — ™, №, ℃, ℓ™ ℃ №
U+2150–U+218FNumber FormsVulgar fractions and Roman numerals as single characters⅓ ⅕ Ⅷ

Symbols and drawing

9
RangeBlockWhat is in itSample
U+2190–U+21FFArrowsArrows in every direction, single and double← ↔ ⇒
U+2200–U+22FFMathematical OperatorsMathematical operators — ∀, ∑, ≠, ∞∀ ∑ ≠
U+2300–U+23FFMiscellaneous TechnicalKeyboard and technical symbols — ⌘, ⌥, ⌫, ⏎⌘ ⌥ ⏎
U+2500–U+257FBox DrawingLines and corners for terminal boxes and tables─ ┌ ╬
U+2580–U+259FBlock ElementsSolid and shaded blocks, used for terminal bar charts█ ▓ ░
U+25A0–U+25FFGeometric ShapesSquares, circles, triangles and diamonds■ ● ▲
U+2600–U+26FFMiscellaneous SymbolsWeather, astrology, chess, cards and the card suits☀ ★ ♥
U+2700–U+27BFDingbatsPrinter's ornaments — check marks, scissors, stars✂ ✓ ➜
U+2800–U+28FFBraille PatternsAll 256 Braille dot patterns, used for terminal graphics too⠁ ⣿

CJK and fullwidth

6

Fullwidth forms are separate characters from their ASCII twins, not a font.

RangeBlockWhat is in itSample
U+3000–U+303FCJK Symbols and PunctuationIdeographic space and CJK punctuationU+3000 is a full-width space and is not trimmed by most whitespace rules.  、 。
U+3040–U+309FHiraganaThe Japanese syllabary for native words and grammarあ ん
U+30A0–U+30FFKatakanaThe Japanese syllabary for loanwords and emphasisア ン
U+4E00–U+9FFFCJK Unified IdeographsThe main Han block — nearly 21,000 characters shared by Chinese, Japanese and Korean日 本 語
U+AC00–U+D7AFHangul SyllablesAll 11,172 precomposed Korean syllablesEach can also be written as separate Jamo, which normalisation reconciles.한 글
U+FF00–U+FFEFHalfwidth and Fullwidth FormsFull-width copies of ASCII, and half-width KatakanaA is not A. Text pasted from CJK forms often needs folding to ASCII.A ! ア

Above U+FFFF, and the special cases

10

Anything here takes two UTF-16 units, which is where string-length bugs come from.

RangeBlockWhat is in itSample
U+D800–U+DB7FHigh SurrogatesFirst half of a UTF-16 pair — never valid on its ownA lone surrogate is what a string cut through an emoji leaves behind.
U+DC00–U+DFFFLow SurrogatesSecond half of a UTF-16 pair — never valid on its own
U+E000–U+F8FFPrivate Use AreaUnassigned by design, for private agreementsWhere icon fonts put their glyphs. Meaningless without the matching font.
U+FFF0–U+FFFFSpecialsThe replacement character and the byte order mark's relativesU+FFFD is what you see when a decoder gave up on a byte.
U+1D400–U+1D7FFMathematical Alphanumeric SymbolsBold, italic, script and double-struck alphabets as charactersThe source of 𝐟𝐚𝐤𝐞 𝐛𝐨𝐥𝐝 in social media names. Unsearchable.𝐀 𝓪 𝟙
U+1F300–U+1F5FFMiscellaneous Symbols and PictographsMost non-face emoji — weather, objects, places, symbols🌍 🔥 📄
U+1F600–U+1F64FEmoticonsThe face emoji😀 🙂
U+1F680–U+1F6FFTransport and Map SymbolsVehicles, traffic and map symbols🚀 🛑
U+1F900–U+1F9FFSupplemental Symbols and PictographsLater emoji additions — later faces, gestures, objects🤖 🧠
U+E0000–U+E007FTagsInvisible tag characters, used in flag sequencesAlso the vector for invisible text smuggled inside a normal-looking string.

FAQ

What is the difference between a block and a script?
A block is a contiguous range of code points; a script is the writing system a character belongs to. They are not the same and often disagree — Latin characters are spread across at least seven blocks, and the Combining Diacritical Marks block is used by several scripts at once. In regex, \p{Script=Latin} is almost always what you want, not \p{Block=…}.
Why do the surrogate rows have no sample characters?
Because a surrogate is not a character. U+D800–U+DFFF are reserved as a pair mechanism for UTF-16: two of them together encode one code point above U+FFFF. On their own they are invalid text, which is exactly why a string cut in the middle of an emoji produces the replacement character — you kept half a pair.
Why does my accented character sometimes count as two?
Because there are two ways to write it. é can be one code point from Latin-1 Supplement, or e followed by a combining acute accent from the Combining Diacritical Marks block. They look identical and compare as unequal. Normalising to NFC collapses the second form into the first, and that is what a normalisation tool is for.
Is an emoji one character?
Rarely. A single displayed emoji is often several code points — a base symbol, skin tone modifiers, variation selectors, and zero-width joiners binding a family together. A length of 1 is the exception, not the rule, and any code that slices strings by index will eventually split one.