Braille Pattern Characters
Unicode's Braille Patterns block (U+2800–U+28FF) encodes all 256 possible combinations of the 8-dot braille cell, enabling braille text to be represented in digital form. This guide explains how Unicode Braille patterns work, how they map to braille cells, and their role in assistive technology.
The Unicode Braille Patterns block (U+2800--U+28FF) encodes all 256 possible combinations of the eight-dot braille cell, creating a complete digital representation of the braille writing system used by millions of visually impaired people worldwide. Unlike most Unicode blocks that encode specific characters with fixed meanings, the Braille Patterns block encodes the dot patterns themselves -- the meaning of each pattern depends on the braille code being used (English Braille, French Braille, Japanese Braille, etc.). This guide explains how Unicode braille works, how the encoding maps to physical dot positions, and how these characters serve accessibility and beyond.
How Braille Works
The Braille Cell
Braille is a tactile writing system invented by Louis Braille in 1824. Each braille character is a cell containing up to six or eight raised dots arranged in a grid:
6-dot cell: 8-dot cell:
1 4 1 4
2 5 2 5
3 6 3 6
7 8
The six-dot cell (the original system) provides 64 possible combinations (2^6 = 64), including the empty cell. The eight-dot cell (used in computer braille and some modern systems) provides 256 combinations (2^8 = 256).
Dots are numbered by column, top to bottom: dots 1-2-3 form the left column, dots 4-5-6 form the right column, and dots 7-8 (in 8-dot braille) form the bottom row.
Braille Grades
English Braille has two main grades:
| Grade | Description | Example |
|---|---|---|
| Grade 1 (Uncontracted) | Letter-by-letter transcription | "the" = ⠞⠓⠑ (t-h-e) |
| Grade 2 (Contracted) | Abbreviations and contractions | "the" = ⠮ (single cell) |
Grade 2 is the standard for published braille in English-speaking countries. It uses approximately 180 contractions and short-form words to reduce the bulk of braille text, which is important because braille takes significantly more physical space than print.
Unicode Braille Encoding
The Block: U+2800--U+28FF
Unicode encodes braille as abstract dot patterns, not as letters or words. Each of the 256 code points represents one specific combination of raised dots in an 8-dot cell.
The encoding uses a binary mapping where each dot position corresponds to a bit:
| Dot | Position | Bit Value | Hex |
|---|---|---|---|
| Dot 1 | Top-left | 0x01 | 1 |
| Dot 2 | Middle-left | 0x02 | 2 |
| Dot 3 | Bottom-left | 0x04 | 4 |
| Dot 4 | Top-right | 0x08 | 8 |
| Dot 5 | Middle-right | 0x10 | 16 |
| Dot 6 | Bottom-right | 0x20 | 32 |
| Dot 7 | Below-left | 0x40 | 64 |
| Dot 8 | Below-right | 0x80 | 128 |
The code point for any braille pattern is:
U+2800 + (sum of bit values for raised dots)
Examples
| Pattern | Raised Dots | Calculation | Code Point | Character |
|---|---|---|---|---|
| Dot 1 only | 1 | 0x2800 + 0x01 | U+2801 | ⠁ |
| Dots 1, 2 | 1, 2 | 0x2800 + 0x01 + 0x02 | U+2803 | ⠃ |
| Dots 1, 4 | 1, 4 | 0x2800 + 0x01 + 0x08 | U+2809 | ⠉ |
| Dots 1, 2, 3 | 1, 2, 3 | 0x2800 + 0x01 + 0x02 + 0x04 | U+2807 | ⠇ |
| All 6 dots | 1--6 | 0x2800 + 0x3F | U+283F | ⠿ |
| All 8 dots | 1--8 | 0x2800 + 0xFF | U+28FF | ⣿ |
| Empty cell | none | 0x2800 + 0x00 | U+2800 | ⠀ |
The empty braille pattern U+2800 (BRAILLE PATTERN BLANK) is notable -- it represents a braille cell with no raised dots and functions as a braille space character.
English Braille Alphabet
The first ten letters of Grade 1 English Braille use dots 1-2-4-5 only (the top four positions):
| Letter | Dots | Code Point | Character |
|---|---|---|---|
| a | 1 | U+2801 | ⠁ |
| b | 1, 2 | U+2803 | ⠃ |
| c | 1, 4 | U+2809 | ⠉ |
| d | 1, 4, 5 | U+2819 | ⠙ |
| e | 1, 5 | U+2811 | ⠑ |
| f | 1, 2, 4 | U+280B | ⠋ |
| g | 1, 2, 4, 5 | U+281B | ⠛ |
| h | 1, 2, 5 | U+2813 | ⠓ |
| i | 2, 4 | U+280A | ⠊ |
| j | 2, 4, 5 | U+281A | ⠚ |
Letters k--t add dot 3 to the a--j patterns. Letters u--z (except w) add dots 3 and 6. The letter w (⠺, dots 2-4-5-6) breaks the pattern because the original French alphabet did not include w -- Louis Braille was French, and w was added later.
Working with Braille in Code
Python: Text to Braille
# Grade 1 English Braille mapping (lowercase a-z)
BRAILLE_ALPHA = {
"a": "\u2801", "b": "\u2803", "c": "\u2809", "d": "\u2819",
"e": "\u2811", "f": "\u280B", "g": "\u281B", "h": "\u2813",
"i": "\u280A", "j": "\u281A", "k": "\u2805", "l": "\u2807",
"m": "\u280D", "n": "\u281D", "o": "\u2815", "p": "\u280F",
"q": "\u281F", "r": "\u2817", "s": "\u280E", "t": "\u281E",
"u": "\u2825", "v": "\u2827", "w": "\u283A", "x": "\u282D",
"y": "\u283D", "z": "\u2835", " ": "\u2800",
}
def text_to_braille(text):
return "".join(BRAILLE_ALPHA.get(c, c) for c in text.lower())
print(text_to_braille("hello world"))
# ⠓⠑⠇⠇⠕⠀⠺⠕⠗⠇⠙
Python: Dot Pattern Calculation
def dots_to_braille(*dots):
# Convert dot numbers (1-8) to a braille character
bit_map = {1: 0x01, 2: 0x02, 3: 0x04, 4: 0x08,
5: 0x10, 6: 0x20, 7: 0x40, 8: 0x80}
value = sum(bit_map[d] for d in dots)
return chr(0x2800 + value)
def braille_to_dots(char):
# Convert a braille character to its dot numbers
offset = ord(char) - 0x2800
bit_map = {0x01: 1, 0x02: 2, 0x04: 3, 0x08: 4,
0x10: 5, 0x20: 6, 0x40: 7, 0x80: 8}
return [dot for bit, dot in sorted(bit_map.items()) if offset & bit]
print(dots_to_braille(1, 2, 4)) # ⠋ (letter f)
print(braille_to_dots("⠋")) # [1, 2, 4]
JavaScript: Braille Encoder
function dotsToBraille(...dots) {
const bitMap = {1:0x01, 2:0x02, 3:0x04, 4:0x08,
5:0x10, 6:0x20, 7:0x40, 8:0x80};
const value = dots.reduce((sum, d) => sum + bitMap[d], 0);
return String.fromCodePoint(0x2800 + value);
}
console.log(dotsToBraille(1, 2, 4)); // ⠋
Braille Art
The 256 braille patterns have been repurposed as a pixel-art medium. Because each 8-dot
braille cell can represent a 2x4 grid of on/off dots, braille characters can render
low-resolution images in plain text terminals. Libraries like Python's drawille use
this technique:
# Each braille character is a 2-wide x 4-tall pixel block
# Full block: dots 1-2-3-4-5-6-7-8 = U+28FF = ⣿
# This creates text-art with 2x4 subpixel resolution
# Example: a simple horizontal line
line = "\u28FF" * 20 # 20 full blocks = 40 pixels wide
print(line)
# ⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿⣿
This "braille art" technique is popular in terminal dashboards (like asciimatics and
blessed) for rendering graphs, charts, and even images at higher resolution than
traditional block characters allow.
Accessibility Considerations
Screen Readers and Braille Displays
Unicode braille characters interact with assistive technology in important ways:
-
Refreshable braille displays can render Unicode braille patterns directly by raising the physical dots that correspond to each character's bit pattern.
-
Screen readers may read Unicode braille characters as their dot numbers (e.g., "dots 1-2-4") rather than their Grade 2 English interpretation. This is because the Unicode characters represent patterns, not letters -- the mapping from pattern to letter depends on the braille code and context.
-
Braille translation software (like JAWS, NVDA, or LibLouis) performs the actual translation between print text and braille. These tools work at a higher level than Unicode code points.
When to Use Unicode Braille
| Use Case | Recommendation |
|---|---|
| Representing braille visually (sighted audience) | Unicode braille characters are appropriate |
| Providing braille content for blind readers | Use braille translation software, not raw Unicode |
| Terminal art and data visualization | Unicode braille characters work well |
| Educational content about braille | Unicode characters are excellent for illustration |
| Accessibility compliance | Follow WCAG guidelines; Unicode braille is not a substitute for proper alt text |
Important Caveat
Unicode braille characters are visual representations of braille cells. They are not a replacement for proper braille translation. Converting English text to Unicode braille using a simple letter-by-letter lookup (as in the code example above) produces Grade 1 braille, which is not the standard for published material. Proper Grade 2 translation requires handling hundreds of contraction rules and is best done by dedicated braille translation libraries like LibLouis.
The Full 256-Pattern Grid
The complete set of 8-dot braille patterns forms a 16x16 grid when arranged by code point:
U+2800: ⠀⠁⠂⠃⠄⠅⠆⠇⠈⠉⠊⠋⠌⠍⠎⠏
U+2810: ⠐⠑⠒⠓⠔⠕⠖⠗⠘⠙⠚⠛⠜⠝⠞⠟
U+2820: ⠠⠡⠢⠣⠤⠥⠦⠧⠨⠩⠪⠫⠬⠭⠮⠯
U+2830: ⠰⠱⠲⠳⠴⠵⠶⠷⠸⠹⠺⠻⠼⠽⠾⠿
U+2840: ⡀⡁⡂⡃⡄⡅⡆⡇⡈⡉⡊⡋⡌⡍⡎⡏
U+2850: ⡐⡑⡒⡓⡔⡕⡖⡗⡘⡙⡚⡛⡜⡝⡞⡟
U+2860: ⡠⡡⡢⡣⡤⡥⡦⡧⡨⡩⡪⡫⡬⡭⡮⡯
U+2870: ⡰⡱⡲⡳⡴⡵⡶⡷⡸⡹⡺⡻⡼⡽⡾⡿
U+2880: ⢀⢁⢂⢃⢄⢅⢆⢇⢈⢉⢊⢋⢌⢍⢎⢏
U+2890: ⢐⢑⢒⢓⢔⢕⢖⢗⢘⢙⢚⢛⢜⢝⢞⢟
U+28A0: ⢠⢡⢢⢣⢤⢥⢦⢧⢨⢩⢪⢫⢬⢭⢮⢯
U+28B0: ⢰⢱⢲⢳⢴⢵⢶⢷⢸⢹⢺⢻⢼⢽⢾⢿
U+28C0: ⣀⣁⣂⣃⣄⣅⣆⣇⣈⣉⣊⣋⣌⣍⣎⣏
U+28D0: ⣐⣑⣒⣓⣔⣕⣖⣗⣘⣙⣚⣛⣜⣝⣞⣟
U+28E0: ⣠⣡⣢⣣⣤⣥⣦⣧⣨⣩⣪⣫⣬⣭⣮⣯
U+28F0: ⣰⣱⣲⣳⣴⣵⣶⣷⣸⣹⣺⣻⣼⣽⣾⣿
This grid demonstrates the binary encoding: the first 64 characters (U+2800--U+283F) cover all 6-dot patterns, and the remaining 192 add dots 7 and 8 in all combinations.
Unicode braille patterns serve as a bridge between the tactile world of braille literacy and the digital world of text processing. Whether used for accessibility, education, terminal art, or data visualization, these 256 characters encode a complete writing system in a mathematically elegant binary framework.
Symbol Reference의 더 많은 가이드
Unicode contains hundreds of arrow symbols spanning simple directional arrows, double arrows, …
Unicode provides multiple check mark and tick symbols ranging from the classic …
Unicode includes a rich collection of star shapes — from the simple …
Unicode contains dozens of heart symbols including the classic ♥, black and …
Unicode's Currency Symbols block and surrounding areas contain dedicated characters for over …
Unicode has dedicated blocks for mathematical operators, arrows, letterlike symbols, and alphanumeric …
Beyond the ASCII parentheses and square brackets, Unicode includes angle brackets, curly …
Unicode offers a wide variety of bullet point characters beyond the standard …
Unicode's Box Drawing block contains 128 characters for drawing lines, corners, intersections, …
Unicode includes musical note symbols such as ♩♪♫♬ in the Miscellaneous Symbols …
Unicode includes precomposed fraction characters for common fractions like ½ ¼ ¾ …
Unicode provides precomposed superscript and subscript digits and letters — such as …
Unicode contains dozens of circle symbols including filled circles, outlined circles, circles …
Unicode includes filled squares, outlined squares, small squares, medium squares, dashed squares, …
Unicode provides a comprehensive set of triangle symbols in all orientations — …
Unicode includes filled and outline diamond shapes, lozenge characters, and playing card …
Unicode provides various cross and X mark characters including the heavy ballot …
The hyphen-minus on your keyboard is just one of Unicode's many dash …
Unicode defines typographic quotation marks — curly quotes — for dozens of …
Unicode includes dedicated characters for the copyright symbol ©, registered trademark ®, …
The degree symbol ° (U+00B0) and dedicated Celsius ℃ and Fahrenheit ℉ …
Unicode's Enclosed Alphanumerics block provides circled numbers ①②③, parenthesized numbers ⑴⑵⑶, and …
Unicode includes a Number Forms block with precomposed Roman numeral characters such …
Greek letters like α β γ δ π Σ Ω are widely …
The Unicode Dingbats block (U+2700–U+27BF) contains 192 decorative symbols originally from the …
Unicode includes a Playing Cards block with characters for all 52 standard …
Unicode provides characters for all six chess piece types in both white …
Unicode's Miscellaneous Symbols block includes the 12 zodiac signs ♈♉♊♋♌♍♎♏♐♑♒♓, planetary symbols, …
Unicode's Geometric Shapes block contains 96 characters covering circles, squares, triangles, diamonds, …
The Unicode Letterlike Symbols block contains mathematical and technical symbols derived from …
Unicode's Miscellaneous Technical block contains symbols from computing, electronics, and engineering, including …
Diacritics are accent marks and other marks that attach to letters to …
Unicode defines dozens of invisible characters beyond the ordinary space, including zero-width …
Unicode includes warning and hazard symbols such as the universal caution ⚠ …
Unicode's Miscellaneous Symbols block includes sun ☀, cloud ☁, rain ☂, snow …
Unicode includes symbols for many of the world's major religions including the …
Unicode includes the traditional male ♂ and female ♀ symbols from astronomy, …
Apple's macOS uses Unicode characters for keyboard modifier keys such as ⌘ …
Unicode symbols like ▶ ◀ ► ★ ✦ ⚡ ✈ and hundreds …