Back to blog
guides5 min read

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:

FontGlyphsLigaturesBest For
GNU Unifont~63,000NoMaximum coverage (bitmap)
Noto Sans Mono~3,800NoBroad scripts + clean look
DejaVu Sans Mono~3,300NoSymbols, math, box drawing
Cascadia Code~2,000104Windows Terminal, box drawing
Iosevka~2,000+OptionalCustomizable, multilingual
Fira Code~1,500150+Coding with ligatures
JetBrains Mono~1,200142Coding with ligatures
Source Code Pro~830NoClean 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:

FontGlyphsNotes
Google Noto (full family)77,000+166 of 172 Unicode scripts
Code2000~53,000Abandonware (creator passed away)
Arial Unicode MS~39,000Ships 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.

Loading privacy settings...