The Braille Patterns block at U+2800–U+28FF is one of the most mathematically clean ranges in the Unicode standard. It encodes the 256 possible combinations of an eight-dot grid — present or absent for each of dots 1 through 8 — and nothing else. Every codepoint in the block is assigned, the names are entirely formulaic, the General Category is uniformly So (Symbol, Other), and the Bidi class is L for every entry. Unlike most Unicode blocks, the codepoints here do not represent letters, syllables, or punctuation: they represent dot patterns. What a given pattern means depends on which braille code — English Grade 1, Spanish, French, Russian Cyrillic, Nemeth math, music braille, computer braille — the reader is using.
About this block
Braille was invented in 1824 by Louis Braille, then fifteen years old and a student at the Royal Institute for Blind Youth in Paris. He adapted a tactile night-writing system devised by Charles Barbier of the French army into a six-dot cell arranged in a 2-by-3 grid: dots 1 and 4 across the top, 2 and 5 across the middle, 3 and 6 across the bottom. Sixty-four patterns fit in a six-dot cell — enough for the basic Latin alphabet, digits, and elementary punctuation, with contractions providing the rest. The eight-dot extension added dots 7 (below dot 3) and 8 (below dot 6) in the late twentieth century, primarily to support computer braille and the dense character sets needed for CJK braille, mathematical notation, and embedded format markers. Unicode introduced the full 256-codepoint Braille Patterns block in version 3.0 in September 1999, choosing to encode every pattern uniformly rather than per-language so that one block could serve every braille tradition.
The codepoint formula is direct. To find the codepoint for a pattern with dots d₁, d₂, … present, sum 2^(d−1) for each dot and add U+2800. Dot 1 contributes 1, dot 2 contributes 2, dot 3 contributes 4, dot 4 contributes 8, dot 5 contributes 16, dot 6 contributes 32, dot 7 contributes 64, and dot 8 contributes 128. So the pattern with dot 1 alone is U+2801 ⠁ (named "BRAILLE PATTERN DOTS-1"); dot 6 alone is U+2820 ⠠ ("DOTS-6"); the classic six-dot full cell is U+283F ⠿ ("DOTS-123456"); and the maximally filled eight-dot cell is U+28FF ⣿ ("DOTS-12345678"). The empty cell, used as a braille space, sits at U+2800 ⠀ and bears the official name "BRAILLE PATTERN BLANK." The systematicity of the names means software can compute the canonical name of any braille pattern at runtime — no lookup table required, which is why this block appears in so many accessibility libraries as a single arithmetic conversion rather than as data.
The block divides cleanly. Codepoints U+2800 through U+283F hold the 64 traditional six-dot patterns (dots 7 and 8 both unset). These are the patterns produced by every typewriter, embosser, and slate-and-stylus from the original 1824 design until very recently. Codepoints U+2840 through U+28FF hold the 192 patterns in which at least one of dots 7 or 8 is set — the eight-dot extension. English Grade 1 braille maps ⠁ (DOTS-1) to "a," ⠃ (DOTS-12) to "b," ⠉ (DOTS-14) to "c," ⠙ (DOTS-145) to "d," and so on through ⠵ (DOTS-1356) for "z." But the same patterns serve entirely different letters in other braille codes. ⠉ is "ц" (tse) in Russian braille; ⠓ (DOTS-125) is "h" in English but appears in different positions in Greek, Arabic, and Hebrew braille. Nemeth Code, the standard for U.S. mathematical braille, repurposes nearly all of the 64 six-dot patterns as digits, operators, and structure markers. Music braille — used to transcribe scores for blind musicians — assigns the same patterns yet again, to notes, rhythms, and articulation. The Unicode standard takes no position on which mapping is "correct": all of them are, simultaneously, depending on context.
For developers, this block is unusually clean to handle. Every codepoint is in BMP, every codepoint is two bytes in UTF-16 and three bytes in UTF-8, no normalization issue arises (none of the patterns decompose), and no bidirectional surprises occur. Accessibility software — JAWS, NVDA, VoiceOver, refreshable braille displays — uses the block as a direct rendering target: the screen reader converts text in any script to braille patterns according to the user's active table and emits the appropriate codepoints to the display hardware. The block is also occasionally used outside accessibility for decorative purposes — small dot-pattern art, mathematical illustrations of binary patterns, and the unusual case of using ⠿ and ⣿ as low-resolution graphics fill characters. For complementary blocks containing related symbols, see Optical Character Recognition at U+2440–U+245F (which holds OCR-A check-printing glyphs and related machine-readable marks) and the various format characters used to control bidirectional and embedded text. For the algorithmic logic behind Unicode block design itself, see what is Unicode?.