How these Unicode text tricks actually work

Why a bold letter can be pasted into a field with no formatting, where these alphabets came from, and why the effect sometimes falls apart.

Guide · About 9 minutes

The first thing to understand is that "fancy text" is not a font, and almost every confusing thing about it follows from that one fact.

Characters, glyphs and fonts

Three different things get called the same thing in casual conversation, and separating them makes the rest straightforward.

A character is an abstract idea: the concept of "lowercase Latin a". It has no appearance. A glyph is a drawing of that character — the particular shape, with its own curves and stroke weight. A font is a file full of glyphs. When you make a word bold in a word processor, you are asking the software to draw the same characters using different glyphs from a different font file. The characters do not change. The text still says the same thing.

This is why bold in a word processor cannot be copied into an Instagram bio. The boldness was never in the text; it was an instruction sitting alongside it, and that instruction does not survive the journey.

Code points, and the numbers behind letters

Computers store characters as numbers. Unicode is the agreed-upon list saying which number means which character, and each entry on that list is a code point. Lowercase a is code point 97. Capital A is 65. The list currently runs to over a hundred and forty thousand entries covering every writing system in active use, plus a great deal else.

Here is the part the tools depend on: somewhere well past a hundred and twenty thousand, there is a code point whose official name is "mathematical sans-serif bold small a". It is not the letter a with boldness applied. It is a separate entry on the list, with its own number, whose defining characteristic is that it looks bold.

So when a generator "makes text bold", it swaps each character for a different character. The weight is a property of the character itself, which means it travels with the text — through a copy, through a paste, through a database, into a bio field that has never heard of formatting. Nothing has to agree to render it bold, because it is not being rendered bold. It just is that shape.

Why these alphabets exist at all

Unicode did not add a bold alphabet so people could decorate their profiles. Every one of these alphabets was encoded to solve a real problem, and the reason matters because it explains their quirks.

  • Mathematics. In an equation, a bold v and an italic v mean different things — a vector and a scalar. If styling were only visual, the meaning would be lost the moment an equation was copied into plain text. So maths got its own bold, italic, script, Fraktur and double-struck alphabets as real characters. That block is the source for bold, cursive, gothic and double-struck text.
  • East Asian typesetting. Chinese and Japanese characters sit on a square grid. Latin letters mixed in looked too narrow, so the older encodings included a second, wider set. That is where full-width text comes from.
  • Phonetics. Linguists needed small capitals and raised letters to notate sounds precisely, giving us the alphabets behind small text.
  • Legacy publishing. Circled letters and numbers were used as reference marks in Japanese and Korean print, so they were encoded to keep those documents representable — the source of bubble text.

None of these were designed as a complete decorative set, which is exactly why several of them have holes.

The holes, and the empty boxes

Unicode has a firm rule: never encode the same character twice. That rule collides awkwardly with the history above.

Some script and Fraktur letters had already been encoded years earlier as standalone mathematical symbols — ℒ for the Laplace transform, ℝ for the real numbers, ℌ for the Hamiltonian. When the full alphabets were added later, those letters could not be added again. Their slots in the new sequence were left permanently empty.

A generator written the lazy way calculates each letter's position by arithmetic: take the letter, add a fixed offset, output the result. That works until it lands in one of the empty slots, at which point it outputs a code point that means nothing at all. Your device, asked to draw a character that does not exist, draws a box.

This is the single most common reason fancy text breaks, and it is entirely avoidable — the fix is a lookup table that points those letters at their real homes. It is why the cursive and gothic tools here produce all twenty-six letters rather than eighteen and eight boxes.

The other cause of boxes is different and not fixable from this end: the character is perfectly valid, but the device has no font containing a drawing of it. Older Android builds and some desktop applications ship font sets that do not cover the more obscure blocks. The text is correct; there is simply nothing to draw it with.

Combining marks: a completely different mechanism

Two of the tools here work on an entirely different principle. Nothing is substituted — your letters stay exactly as typed, and extra characters are inserted between them.

A combining mark is a character with no width that is drawn on top of whatever came immediately before it. This is how accents work in many languages: an e followed by a combining acute accent displays as é, using two code points to produce one visible letter.

The strikethrough tool uses a mark that draws a horizontal line instead of an accent, inserted after every character. The cursed text tool exploits the fact that the standard sets no limit on how many marks may attach to one letter. Stack forty and the renderer dutifully draws forty, stacking them outward until they overflow the line. That overflow is the entire effect — not a bug or an exploit, just the accent rule followed well past sense.

Why your character count doubles

Because combining marks are real characters, a strikethrough word costs twice its apparent length. Five visible letters means ten code points: five letters and five marks. Most software treats the letter and its mark as one unit for cursor movement and deletion — the technical term is a grapheme cluster — which is why one backspace usually removes both. But a character counter counts code points, so a bio field will tell you that you have used twice as much space as you can see.

Why text sometimes reverts to plain letters

You paste a styled name into a form, submit it, and it comes back ordinary. Nothing went wrong; the site did it on purpose.

Unicode defines normalisation, a process for reducing text to a canonical form so that things which ought to match do match. One variety, NFKC, is aggressive: it deliberately collapses the mathematical alphabets back to plain letters, on the entirely reasonable grounds that a bold A and a plain A are the same letter and a search for one should find the other.

Sites apply it to usernames, search queries and anything that needs to be compared reliably. When a field normalises, no amount of cleverness will make styled text stick, because the field is working correctly.

What this means in practice

Four things follow from all of the above:

  • Styled text is not searchable. Different characters do not match a plain query — in site search, browser find, or Google.
  • Screen readers struggle. Assistive software may spell these characters out one at a time or skip them. Keep essential information plain.
  • Rendering varies by device. Test on a phone that is not yours before committing.
  • It cannot be undone by the reader. Unlike formatting, the styling is welded into the text. That is the appeal and the drawback in one.

Used deliberately — a heading, a name, a divider — none of that is a problem. Used for a whole profile, all four bite at once.


Tools mentioned in this guide