Best Fonts for Unicode Characters and ASCII Art
You paste a fancy gamertag into Discord. It looks perfect. You paste the same thing into your terminal and half the characters turn into blank rectangles — the dreaded "tofu."
The problem is almost never Unicode itself. It's your font. Most fonts only cover a fraction of the 150,000+ characters in the Unicode standard. Pick the wrong one and your carefully crafted text art falls apart.
Here's what actually works.
Why no single font covers everything
A single font file tops out at 65,535 glyphs. Unicode defines over 150,000 characters across 172 writing systems. The math doesn't work — no single file can hold it all.
Font families like Google Noto get around this by splitting coverage across dozens of files. Your operating system falls back through a font stack until it finds one that has the glyph you need. When nothing in the stack has it, you get tofu.
The best monospace fonts for Unicode
Monospace fonts are what matter for ASCII art, terminals, and code editors. Here's how the major ones compare:
| Font | Glyphs | Ligatures | Best For |
|---|---|---|---|
| GNU Unifont | ~63,000 | No | Maximum coverage (bitmap) |
| Noto Sans Mono | ~3,800 | No | Broad scripts + clean look |
| DejaVu Sans Mono | ~3,300 | No | Symbols, math, box drawing |
| Cascadia Code | ~2,000 | 104 | Windows Terminal, box drawing |
| Iosevka | ~2,000+ | Optional | Customizable, multilingual |
| Fira Code | ~1,500 | 150+ | Coding with ligatures |
| JetBrains Mono | ~1,200 | 142 | Coding with ligatures |
| Source Code Pro | ~830 | No | Clean Latin-focused work |
Every font on this list is free and works on Windows, Mac, and Linux.
Our picks by use case
For ASCII art and text art: DejaVu Sans Mono
DejaVu covers the characters that matter most for text art — box drawing, geometric shapes, arrows, math symbols, and the Latin/Greek/Cyrillic alphabets. It comes pre-installed on most Linux distributions and renders cleanly at any size.
It won't render CJK characters or obscure scripts, but for ASCII art and Unicode symbol work, the coverage hits the sweet spot between "enough" and "not bloated."
For gamertags and fancy text: Noto Sans Mono
When you're generating styled gamertags with mathematical bold, fraktur, or accented characters, Noto Sans Mono covers 39 Unicode blocks. That includes the mathematical alphanumeric symbols block where most fancy text styles live.
Noto stands for "No Tofu" — Google built the entire family specifically to eliminate those blank rectangles. If a character exists in Unicode, Noto probably has a glyph for it.
For terminals and coding: Cascadia Code or Fira Code
Both have coding ligatures that turn => into arrows and != into proper not-equals signs. Cascadia Code ships with Windows Terminal and has strong box-drawing support. Fira Code has more ligatures and slightly wider Unicode coverage.
If you don't care about ligatures, DejaVu Sans Mono or Noto Sans Mono give you better raw character coverage.
For absolute maximum coverage: GNU Unifont
With roughly 63,000 glyphs, GNU Unifont covers the entire Basic Multilingual Plane and chunks of the supplementary planes. It renders characters that nothing else can.
The catch: it's a bitmap font built on a 16x16 pixel grid. It looks like it belongs in a 1990s terminal. Functional, not pretty. Use it as a fallback, not your primary font.
The best proportional fonts
If you're not doing monospace work — say you're building a website or document that needs to display Unicode symbols inline — these proportional fonts have the widest coverage:
| Font | Glyphs | Notes |
|---|---|---|
| Google Noto (full family) | 77,000+ | 166 of 172 Unicode scripts |
| Code2000 | ~53,000 | Abandonware (creator passed away) |
| Arial Unicode MS | ~39,000 | Ships with older MS Office |
Google Noto is the clear winner here. It's free, actively maintained, and available everywhere.
Font stacks that actually work
Don't rely on a single font. Set up a stack so your system falls back gracefully:
font-family: 'Fira Code', 'DejaVu Sans Mono', 'Noto Sans Mono', 'Cascadia Code', monospace;
Your browser or terminal walks this list left to right. If Fira Code doesn't have a glyph, DejaVu takes over. If DejaVu misses it, Noto picks it up. The generic monospace fallback catches anything that slips through.
On the web, you can load Noto Sans Mono from Google Fonts as a fallback without forcing every visitor to download it — the browser only fetches the font file when it actually needs a glyph from it.
How to test your font's coverage
Before committing to a font, test it with characters you actually use. Paste these into your editor or terminal and see what renders:
╔═══╗ ║ ╚═══╝ █▓▒░ ← → ↑ ↓ ★ ♠ ♣ ♥ ♦ ∞ ≈ ≠ ≤ ≥ 𝔉𝔯𝔞𝔨𝔱𝔲𝔯 𝐁𝐨𝐥𝐝 𝑰𝒕𝒂𝒍𝒊𝒄 ꜱᴍᴀʟʟ ᴄᴀᴘꜱIf any of those show up as rectangles or question marks, your font doesn't cover them. Switch fonts or add a fallback.
Quick recommendation
If you want one answer: install Noto Sans Mono and put it in your font stack. It covers more ground than any other readable monospace font, it's free, and it works everywhere. Pair it with Fira Code or JetBrains Mono as your primary for the ligature support, and let Noto handle the rest.
For ASCII art specifically, DejaVu Sans Mono remains the workhorse — it has the box-drawing and geometric characters you need, and it's already on your system if you're running Linux.