Font generator
Unicode text converter
A Unicode text converter replaces each letter of your text with a different Unicode character: bold ๐ is U+1D400, while an ordinary A is U+0041. Type below and copy any style. The result is still plain text, only made of other characters, which is why it pastes into any text box and why spell checkers and screen readers can stumble over it.
Updated 6 October 2026
Your text in every style
Changes as you type. It all happens in your browser, so nothing is uploaded.
๐๐๐ฑ๐ญ ๐ข๐ฌ ๐ฃ๐ฎ๐ฌ๐ญ ๐ง๐ฎ๐ฆ๐๐๐ซ๐ฌ
Bold (serif)
๐๐๐ฅ๐ก ๐๐ ๐๐ข๐ ๐ก ๐๐ข๐๐๐๐๐
Italic (serif) ยท Numbers stay upright.
๐ฏโฏ๐๐ ๐พ๐ ๐ฟ๐๐๐ ๐๐๐๐ทโฏ๐๐
Cursive ยท Numbers stay as they are.
๐๐ข๐ต๐ฑ ๐ฆ๐ฐ ๐ง๐ฒ๐ฐ๐ฑ ๐ซ๐ฒ๐ช๐๐ข๐ฏ๐ฐ
Old English ยท Numbers stay as they are.
๐๐๐ฉ๐ฅ ๐๐ค ๐๐ฆ๐ค๐ฅ ๐๐ฆ๐๐๐๐ฃ๐ค
Outline
๐๐๐ก๐ ๐๐ ๐๐๐๐ ๐๐๐๐๐๐๐
Typewriter
More stylesFewer styles36
Bold & italic ยท 5
๐ง๐ฒ๐ ๐ ๐ถ๐ ๐ท๐๐๐ ๐ป๐๐บ๐ฏ๐ฒ๐ฟ๐
Bold
๐๐ฆ๐น๐ต ๐ช๐ด ๐ซ๐ถ๐ด๐ต ๐ฏ๐ถ๐ฎ๐ฃ๐ฆ๐ณ๐ด
Italic ยท Numbers stay upright.
๐ป๐๐๐ ๐๐ ๐๐๐๐ ๐๐๐๐๐๐๐
Bold italic (serif) ยท Numbers stay upright.
๐๐๐ญ๐ฉ ๐๐จ ๐๐ช๐จ๐ฉ ๐ฃ๐ช๐ข๐๐๐ง๐จ
Bold italic ยท Numbers stay upright.
๐ณ๐พ๐๐ ๐๐ ๐๐๐๐ ๐๐๐๐ป๐พ๐๐
Sans serif
Cursive ยท 1
๐ฃ๐ฎ๐๐ฝ ๐ฒ๐ผ ๐ณ๐พ๐ผ๐ฝ ๐ท๐พ๐ถ๐ซ๐ฎ๐ป๐ผ
Bold cursive ยท Numbers stay as they are.
Gothic ยท 1
๐ฟ๐๐๐ ๐๐ ๐๐๐๐ ๐๐๐๐๐๐๐
Bold Old English ยท Numbers stay as they are.
Bubbles & boxes ยท 6
โโโงโฃ โโข โโคโขโฃ โโคโโโโกโข
Bubble
๐ ฃ๐ ๐ ง๐ ฃ ๐ ๐ ข ๐ ๐ ค๐ ข๐ ฃ ๐ ๐ ค๐ ๐ ๐ ๐ ก๐ ข
Black bubble ยท Capitals only.
๐ ๐ด๐ ๐ ๐ธ๐ ๐น๐ ๐ ๐ ๐ฝ๐ ๐ผ๐ฑ๐ด๐ ๐
Square ยท Capitals only.
๐๐ ด๐๐ ๐ ธ๐ ๐ น๐๐๐ ๐ ฝ๐๐ ผ๐ ฑ๐ ด๐๐
Black square ยท Capitals only. Some letters show as emoji (๐ ฐ ๐ ฑ ๐ พ ๐ ฟ).
๐ฃโ โณโฏ โคโฎ โฅโฐโฎโฏ โฉโฐโจโโ โญโฎ
Brackets
๏ผด๏ฝ ๏ฝ๏ฝใ๏ฝ๏ฝใ๏ฝ๏ฝ๏ฝ๏ฝใ๏ฝ๏ฝ๏ฝ๏ฝ๏ฝ ๏ฝ๏ฝ
Wide (vaporwave)
Small ยท 2
แดแดxแด ษช๊ฑ แดแด๊ฑแด ษดแดแดสแดส๊ฑ
Small caps
แตแตหฃแต โฑหข สฒแตหขแต โฟแตแตแตแตสณหข
Tiny ยท No small q exists, so a look-alike is used.
Lines ยท 6
Tฬถeฬถxฬถtฬถ iฬถsฬถ jฬถuฬถsฬถtฬถ nฬถuฬถmฬถbฬถeฬถrฬถsฬถ
Strikethrough
Tฬธeฬธxฬธtฬธ iฬธsฬธ jฬธuฬธsฬธtฬธ nฬธuฬธmฬธbฬธeฬธrฬธsฬธ
Slashed
Tฬฒeฬฒxฬฒtฬฒ iฬฒsฬฒ jฬฒuฬฒsฬฒtฬฒ nฬฒuฬฒmฬฒbฬฒeฬฒrฬฒsฬฒ
Underline
Tฬณeฬณxฬณtฬณ iฬณsฬณ jฬณuฬณsฬณtฬณ nฬณuฬณmฬณbฬณeฬณrฬณsฬณ
Double underline
Tฬ eฬ xฬ tฬ iฬ sฬ jฬ uฬ sฬ tฬ nฬ uฬ mฬ bฬ eฬ rฬ sฬ
Overline
Tฬคeฬคxฬคtฬค iฬคsฬค jฬคuฬคsฬคtฬค nฬคuฬคmฬคbฬคeฬคrฬคsฬค
Dotted
Fun ยท 11
sษนวqษฏnu สsnษพ sแด สxวโฅ
Upside down
ฦจษฟษdmun ฦฦจuฤฏ ฦจi ฦxษT
Mirror
Tฬฬeฬฬญxฬอtฬฬ iอฬsฬฬ jอฬuออsฬฬtฬฬ nฬฬบuออmฬฬบbฬฬ eอฬ rฬฬ sฬอ
Glitch
Tฬฬeฬฬญxฬฬฬฬญฬฬ tอฬฬอฬฬบฬฬ ฬบอ iฬฬsฬออชฬฬฬ ฬบอฬอ jอฬฬฬอฬ ฬ ฬ ฬ ฬ uฬฬ sอฬฬฬออฬอฬฬtอฬอฬญฬ อ nฬฬฬฬฬญฬuอฬฬฬอฬญmฬฬฬอออฬ ออฬญbฬฬฬฬญฬ ฬ eฬฬอซฬญฬบฬญrอออฬฬฬบฬ ออฬญsฬฬอฬบฬญฬบ
Zalgo (heavy glitch)
T e x t i s j u s t n u m b e r s
Spaced out
โง๏ฝฅ๏พ: *โง๏ฝฅ๏พ:* Text is just numbers *:๏ฝฅ๏พโง*:๏ฝฅ๏พโง
Sparkles
โก T e x t โก i s โก j u s t โก n u m b e r s โก
Hearts
๊ฐเฆ Text is just numbers เป๊ฑ
Cute frame
โ ๅฝก Text is just numbers ๅฝกโ
Stars
โ Text is just numbers โ
Flowers
โณ Text is just numbers โณ
Arrows
Look-alike ยท 4
โฎษำพโฎ ลโด Jษโดโฎ โฆษโฅเธฟษโฑคโด
Currency ยท Letters from currency signs; hard to read for screen readers.
ะัะถั ั$ jั$ั ะฟััซะฑัั$
Faux Cyrillic ยท Real Cyrillic letters chosen for their shape, so the words read as gibberish to screen readers.
๊๊๊ง๊ ๊ค๊ ๊ป๊๊๊ ๊ค๊๊ญ๊๊๊ช๊
Fancy ยท Yi syllables chosen for their shape.
แแแแ แฅแ แ แฌแแ แแฌแทแฐแแแ
Tribal ยท Cherokee and Ethiopic letters chosen for their shape.
Where they work
| Where | Works? | Notes |
|---|---|---|
| Instagram and Facebook text | Works | Bios, captions, comments, posts and chats accept converted text, since it's made of ordinary Unicode characters. Usernames and Facebook profile names are the exceptions. |
| Usernames and handles | Doesn't work | Instagram, X and most other sites limit handles to a short list of plain characters, and no converted letter is on it. |
| Code, links and file names | Doesn't work | A converted letter is a different code point, so a command, web address or file name typed in ๐๐๐๐๐๐๐๐๐ won't match the real one. |
| Spreadsheets and databases | Partly | They store fine as UTF-8, but each letter takes four bytes, and sorting, filtering and length checks treat them as different characters from the plain ones. |
| Documents and email | Partly | They paste and keep their look, but spell check tends to flag the words, and a word processor's own bold and italic buttons do the job better. |
| Hashtags | Doesn't work | Converted letters don't spell the plain tag, so #๐ฌ๐ฎ๐ฆ๐ฆ๐๐ซ usually won't count toward #summer. |
Where each style starts
Unicode gives every character a number, its code point. The styled letters live in the Mathematical Alphanumeric Symbols block, added in Unicode 3.1 in 2001: just under 1,000 characters for maths, where a bold ๐ฏ and a plain v can stand for different things. Every style is stored in alphabetical order, capitals first, so this reference is all a converter needs:
| Style | Capital A | Small a | Digits |
|---|---|---|---|
| Bold ๐๐ | U+1D400 | U+1D41A | Yes, from U+1D7CE |
| Italic ๐ด๐ | U+1D434 | U+1D44E | None |
| Script ๐๐ถ | U+1D49C | U+1D4B6 | None |
| Fraktur ๐๐ | U+1D504 | U+1D51E | None |
| Double-struck ๐ธ๐ | U+1D538 | U+1D552 | Yes, from U+1D7D8 |
| Monospace ๐ฐ๐ | U+1D670 | U+1D68A | Yes, from U+1D7F6 |
To get any letter, add its place in the alphabet to the starting point: bold C is U+1D400 plus 2, or U+1D402. The block holds 13 Latin alphabets in all, the six above plus bold italic, bold script, bold Fraktur and four sans-serif styles, with Greek letters and five sets of digits alongside. Twenty-four letters have no slot of their own (one italic, eleven script, five Fraktur and seven double-struck), because they were encoded earlier as letterlike symbols between U+2100 and U+214F, and a converter fills those in from there. Anything without a styled twin, such as punctuation, emoji and accented letters, passes through unchanged.
What converted text costs in storage
A plain English letter takes one byte in UTF-8, the encoding most of the web uses. Every letter in the maths block sits above U+FFFF, so it takes four bytes in UTF-8 and two code units, a surrogate pair, in UTF-16, the encoding used inside JavaScript, Java and Windows. The sample on this page shows the difference:
| Measure | Plain | Bold |
|---|---|---|
| What you see | Text is just numbers | ๐๐๐ฑ๐ญ ๐ข๐ฌ ๐ฃ๐ฎ๐ฌ๐ญ ๐ง๐ฎ๐ฆ๐๐๐ซ๐ฌ |
| Characters | 20 | 20 |
| Bytes in UTF-8 | 20 | 71 |
| UTF-16 code units (JavaScript .length) | 20 | 37 |
That's why converted text can hit a length limit early. A form that counts bytes or UTF-16 units fills up two to four times faster, X counts each styled letter as two of its 280, and an older MySQL column declared as โutf8โ stores at most three bytes per character, so it can't keep these letters at all; it needs utf8mb4.
How code treats converted letters
Converted letters pass some tests for โis this a letter?โ and fail others, which catches out search boxes, sign-up forms and scripts that handle what people type. Here is what JavaScript does with ๐๐๐ฑ๐ญ:
| Test | Result | What it means |
|---|---|---|
| /^\p{L}+$/u | Matches | Unicode classes them as real upper- and lower-case letters |
| /^[a-z]+$/i or \w | No match | Checks written for plain English letters turn them away |
| toLowerCase() and toUpperCase() | No change | They have no case mappings, so case-insensitive matching fails |
| === 'Text' | false | A plain comparison sees four different characters |
| Default sort() | After z | Simple sorting puts every maths letter after all the ordinary ones |
| Intl.Collator('en') | Next to A, B, C | Language-aware sorting treats them as variants of the plain letters |
Python behaves much the same: str.lower() leaves them alone, and sorted() puts them last. The safe pattern in any language is to keep what the person typed for display, and compare, search and deduplicate on a normalized copy.
Turning it back into plain text
Every letter in the maths block has a compatibility mapping, tagged <font>, back to its plain letter. Unicode normalization form NFKC applies those mappings, so a single function call undoes the conversion, gaps included: โ becomes h and โ becomes R.
- JavaScript: text.normalize('NFKC')
- Python: unicodedata.normalize('NFKC', text)
- Java: Normalizer.normalize(text, Normalizer.Form.NFKC)
- Swift: text.precomposedStringWithCompatibilityMapping
NFKC is blunt, though. It also turns ๏ฌ into fi, ยฒ into 2 and ยฝ into 1โ2, so run it over the styled part rather than a whole document full of footnotes and fractions. Styles built from other alphabets, such as small caps, upside down text and faux Cyrillic, have no mapping back and have to be retyped.
Tip: To see what a string is made of, list its code points. In a browser console, [...text].map(c => c.codePointAt(0).toString(16)) prints each character's number in hex; values from 1d400 to 1d7ff are maths letters.
Questions people ask
Is a Unicode text converter the same as changing the font?
No. A font changes how the same characters are drawn, and the text underneath stays as it was. A converter changes the characters themselves, so the style goes wherever the text goes, but the words are no longer the plain letters other software expects.
Why do some converted letters show as boxes?
Usually the device has no font that covers the maths block, which is now rare on current phones and computers but still happens on old ones. If only certain letters fail, and they fail everywhere, the converter used an empty slot instead of the older letter that belongs there.
When were these characters added to Unicode?
The maths letters arrived in Unicode 3.1 in 2001. Two italic dotless letters, ๐ค and ๐ฅ, followed in Unicode 4.1, and a bold digamma, an old Greek letter, in Unicode 5.0. The letterlike symbols that fill the gaps go back to Unicode 1.1 in 1993.
Can I convert text to code points instead?
That's a different job. To show the numbers behind text, write them in U+ notation, such as U+0041 for A, or as escapes: \u{1D400} in JavaScript or 𝐀 in HTML. The converter on this page works the other way round, choosing new code points so the text looks different.
Related font pages
More font generators
Symbols, bios and captions
Turn comments on your posts into DMs
Ask people to comment a word like LINK. DMFast replies to each one and sends them your link in a DM, on Instagram and Facebook. Free plan, no card.
Start free