A 23-character phrase fits in a 30-character field. Convert it to bold and the same 23 characters are refused. Nothing was added, no frame, no decoration, and the counter still says you are over. The explanation is a decision made in the 1990s about how text is stored in memory, and it decides which styles you can afford in a tight field. This is the single most useful piece of background for anyone writing near a limit.
When you count a string you count characters. When software counts a string it often counts units of storage, and the two numbers are only equal for text in the range software was originally built for.
Most programming languages that power the apps you paste into store text as UTF-16, a format that uses 16 bits per unit. Any character whose code point fits in 16 bits costs one unit. Any character above that costs two.
The boundary is U+FFFF. Everything below it is the Basic Multilingual Plane, which covers Latin, Greek, Cyrillic, Arabic, Hebrew, the CJK ideographs and most of what the world writes with. Everything above it costs double.
That is the entire mechanism. The rest is knowing which styles sit on which side of the line.
UTF-16 needed a way to represent characters that do not fit in 16 bits, and the solution was to reserve a range of values that never stand for a character on their own.
A character above U+FFFF is stored as two of those reserved values, one from a high range and one from a low range. Together they are a surrogate pair, and software that understands the encoding reassembles them into one character when it needs to display it.
Software that does not understand the encoding counts them as two. That is not a bug in the counting, exactly. It is counting the thing it stores rather than the thing you see, and for the first several years of Unicode those were the same number.
The pair mechanism arrived with Unicode 3.1 in March 2001, the first version of the standard to encode anything beyond the Basic Multilingual Plane at all.
The mathematical alphabets are the expensive ones. Bold, italic, bold italic, script, bold script, fraktur, double-struck, sans-serif and monospace all come from Mathematical Alphanumeric Symbols at U+1D400 to U+1D7FF, which is above the boundary. Every letter is a surrogate pair, so every letter costs two units.
Emoji are above the boundary too, and many cost more than two units because they are built from several code points joined together.
The cheap styles sit below U+FFFF and cost one unit each: small capitals from the phonetics block, superscripts, fullwidth letters, circled letters, and every decorative frame ornament on the site.
So the split is not between plain and styled. It is between two groups of styles, and the group most people reach for first is the expensive one. You can compare them directly on the fancy text generator.
Take a 23-character phrase with two spaces in it: 21 letters and 2 spaces.
Plain, that is 23 characters and 23 storage units, because every character is below the boundary.
Converted to mathematical bold, it is still 23 characters. The letters are now surrogate pairs at two units each, and the spaces stay at one, so the storage count is 21 times 2 plus 2, which is 44.
A field that counts characters accepts it at 23. A field that counts storage units sees 44 and refuses it against a 30 limit.
You cannot tell which kind of field you are looking at from the outside, and platforms are not consistent about it even between their own fields. The string length tool and the character counter both report the two numbers separately so you can see how far apart they are before you paste.
For a phrase made entirely of mathematical letters, the storage count is roughly double the character count. Halving the limit gives you a usable working budget.
A 30-character display name holds about 15 mathematical bold letters. A 150-character Instagram bio holds about 75. A 160-character X bio holds about 80. A 101-character Facebook bio holds about 50.
The approximation breaks in two directions. Spaces, digits and punctuation stay at one unit each, so a phrase with a lot of them costs less than double. Emoji can cost considerably more than two, so a phrase with several costs more than double.
Treat halving as the planning figure and the real counter as the answer. If your text is within a few characters of a limit either way, paste it into the actual field and read the number the platform gives you.
Some platforms count characters properly. Some count UTF-16 units. Some count bytes in UTF-8, which is a third number again, where a Latin letter costs one byte and a mathematical letter costs four.
There is no way to inspect this from the outside and no reason to expect consistency, because the counting usually reflects whichever language the validation was written in rather than a deliberate policy.
The same platform can behave differently in different places. A web form and a mobile client for the same service may validate in different languages against the same field.
Which is why the advice ends the same way every time: the tools here give you accurate numbers for both counts, and only the platform knows which one it charges you for. Paste before you publish.
There is a version of this you can watch happen.
In some text fields, pressing the left arrow key once inside a styled word moves the cursor half a character, because it moved by one storage unit rather than one character. Press backspace and you delete half a surrogate pair, leaving a lone reserved value that cannot be displayed and renders as a replacement box.
This is rarer than it used to be, because most modern text engines handle grapheme clusters correctly. It still shows up in older software, in some game clients, and in terminal applications.
If you have ever seen a styled word break into a rectangle after an edit, this is what happened. The fix is to delete the whole word and retype it rather than trying to repair the middle.
When a field is tight, the cheapest styles are the ones below the boundary, and they are not a compromise.
Small caps costs one unit per letter and reads as typographic rather than decorated. Fullwidth costs one unit per letter and changes the rhythm of a line completely. Circled letters cost one unit each. Every frame ornament costs one.
So a 30-character name can hold 30 small capitals, or 15 bold letters, for the same limit. On a tight cap that is the difference between fitting your whole name and fitting half of it.
This is why the per-page style sets on the social pages matter. The Facebook page narrows to styles that fit a 101-character bio, which excludes the ones whose cost grows with your text, and the badges count against the real field rather than a generic one.
Characters are what you count. Storage units are what software often counts. They diverge above U+FFFF.
Bold, italic, script, fraktur, double-struck, sans-serif and monospace all sit above it and cost two units per letter. Small caps, superscripts, fullwidth, circled letters and frame ornaments all sit below it and cost one.
Plan at half the stated limit when using the expensive group, then check against the real field.
And if a field refuses text that is clearly short enough, this is almost always why, rather than anything you did wrong.
There is a third way to count the same string and it appears whenever text is stored, transmitted or limited by size rather than by length.
UTF-8 encodes each character in one to four bytes. An ASCII letter takes one. A Latin letter with an accent takes two. Most CJK characters take three. Everything above U+FFFF, which is every mathematical alphabet character and every emoji, takes four.
So a phrase of 21 styled letters is 21 characters, 42 storage units in UTF-16, and 84 bytes in UTF-8. Three numbers for one string, all of them correct for different purposes.
Byte limits turn up in database columns, HTTP headers, filenames and message protocols. A field declared to hold 100 bytes holds 100 ASCII letters or 25 styled ones.
If a field rejects your text and neither the character count nor the storage count explains it, the byte count usually does.
The letters are mathematical alphanumerics, which sit above U+FFFF and are stored as surrogate pairs at two units each. The spaces still cost one, so 21 letters plus 2 spaces comes to 44.
No. Small capitals, superscripts, fullwidth letters, circled letters and frame ornaments all sit below U+FFFF and cost one unit each, the same as a plain letter.
You cannot tell from the outside, and platforms are inconsistent even between their own fields. Paste the real text into the real field and read the counter it gives you.