Cursivetool
All posts

Unicode Fancy Text Explained — How Copy-Paste Fonts Actually Work

By Sam··Updated 2026-05-05·4 min read

Fancy Instagram bios survive copy-paste across iPhones, Androids, browsers, and SMS — but fail when you try to use them as usernames. The answer is Unicode. Here is what Unicode actually is, what "fancy fonts" are doing inside the standard, and where the rough edges are.

What is Unicode

Unicode is an inventory of every character humans write — letters, digits, punctuation, emoji, technical symbols, dead languages — and assigns each one a number called a code point. The lowercase English "a" is code point 97. The face-with-tears-of-joy emoji is code point 128514.

The whole inventory is open: anyone can read the standard at unicode.org. Updates are made roughly once a year by the Unicode Consortium, a nonprofit that includes Apple, Google, Microsoft, and a few other major tech companies.

When you type "a" on your phone, three things happen:

  1. The keyboard sends code point 97 to the app you're using.
  2. The app stores 97 in memory, sends it across the network if needed, and saves it to disk if you save your text.
  3. The display layer (combination of operating system + font) draws the visible "a" glyph.

This three-step pipeline matters because it explains the whole behavior of fancy text. Code points are universal — every modern device speaks Unicode. Glyphs (the actual pictures) live in fonts, and fonts vary device to device.

How fancy text uses Unicode

A "fancy text generator" is a small JavaScript function that maps your input characters to different Unicode code points whose default glyphs happen to look stylized.

For example: lowercase "a" is code point 97 (U+0061). The Mathematical Italic block contains a code point at U+1D44E whose default glyph is "𝑎" — a slanted italic version. The generator simply replaces 97 with 0x1D44E. The browser, the social media app, and your friend's phone all see standard Unicode and render whatever glyph their font has for that code point.

There are no fonts being uploaded. No CSS hacks. No images. Just different code points whose defaults happen to look fancy.

The blocks that fancy text generators use

Unicode is divided into "blocks" — contiguous ranges of code points dedicated to a category. The blocks most fancy text tools draw from:

| Block | Range | Looks like | Notes | |---|---|---|---| | Mathematical Alphanumeric | U+1D400–U+1D7FF | 𝐀𝒜𝓐𝔄𝔸 | Bold, Italic, Script, Fraktur, Double-Struck | | Enclosed Alphanumerics | U+2460–U+24FF | Ⓐⓐ① | Bubble outline | | Enclosed Alphanumeric Supplement | U+1F100–U+1F1FF | 🅐🅑 | Bubble filled | | Halfwidth and Fullwidth Forms | U+FF00–U+FFEF | Wide | Aesthetic / vaporwave | | Latin Letter Small Capitals | various | ᴀʙᴄ | Small caps | | Combining Diacritical Marks | U+0300–U+036F | a̶b̶c̶ | Strikethrough, glitch |

Most generators (ours included) use these six blocks plus a few hand-curated mappings for punctuation and digits.

Why some characters break and others don't

Three failure modes appear in practice:

1. The font doesn't include the glyph. Older Android phones ship with minimal fonts to save space. If you paste a Mathematical Bold-Script "𝐀" and the phone's font has no glyph for U+1D400, the renderer shows a placeholder rectangle ("tofu"). Your text is fine — it's still U+1D400. The receiving device just can't draw it. We have a whole post on the tofu problem.

2. The platform filters out non-standard characters. Username fields on Instagram, TikTok, GitHub, etc. typically allow only ASCII (code points 32–126) plus a few common extensions. Pasting a "𝐀" gets stripped or rejected. Bio fields, post bodies, comments, and display names almost always allow the full range.

3. Combining marks break monospaced layouts. Strikethrough and zalgo (glitch) work by adding a combining mark to each character (U+0336, U+0301, etc.). Most apps render combining marks correctly, but some terminal emulators and code editors get confused — the cursor position drifts. Avoid these styles in commit messages and shell scripts.

What's not possible with Unicode tricks

The technique is constrained. Here's what people often try and fail to do:

  • Custom fonts in places that don't allow CSS. You cannot use Unicode tricks to display Arial on a platform that's rendering everything in their own font. Unicode can only swap which character is sent — not which font draws it.
  • True color or animated text. No Unicode block holds animation or color information. Anything that looks animated is either an emoji (which has color built in) or an image.
  • Custom alphabets for an entire post. You can swap out individual characters but the swap is deterministic; you cannot make the same letter look different in different places without copy-paste effort.
  • Larger font sizes via Unicode. There is no "large A" code point. Size is determined entirely by the rendering app.

When Unicode tricks are the right tool

Use cases that actually work:

  • Decorating bios, headlines, and short text.
  • Quote graphics where you want to single out a word.
  • Section dividers in long captions.
  • Username display names (when the platform allows non-ASCII).
  • Code comments where ASCII would be ugly (e.g. ▶ instead of >, ✓ instead of [x]).

When to use real fonts instead

Two situations where Unicode tricks are the wrong call:

  1. You control the rendering surface. A blog, a website, an ebook, a PDF — anything where you can attach a font-family. Use proper webfonts. They are higher quality and infinitely flexible.
  2. You need typographic features Unicode doesn't have. OpenType ligatures, kerning pairs, contextual alternates, true italics. Real fonts handle these. Unicode tricks can't.

The cursive generator and fancy text generator implement most of the techniques described here. Conversion happens entirely in your browser — your text never leaves the page. View source if you're curious how the mapping table works; the cursive transform is roughly 80 lines of JavaScript.

For safe-vs-risky styles by device, see Why cursive text doesn't show up.

Related articles

Try the tools mentioned