Uppercase is not always a one-for-one swap
Most of the time, capitalising a string leaves its length alone: one lowercase letter in, one capital out. It is such a reliable assumption that people build database columns and character limits on it, and then are surprised when a name overflows.
The assumption is wrong for a specific, enumerable set of characters. Scanning every code point in the Basic Multilingual Plane through the same case-mapping the browser uses finds 102 characters whose uppercase form is longer than one character, 16 of which expand to three. The great majority — 81 of the 102 — are polytonic Greek vowels carrying multiple diacritics, and 6 more are Armenian ligatures. That leaves 15 that a Latin-script writer will actually meet:
| Character | Code point | Uppercases to | Characters after |
|---|---|---|---|
| ß | U+00DF | SS | 2 |
| ʼn | U+0149 | ʼN | 2 |
| ǰ | U+01F0 | J̌ | 2 |
| ẖ | U+1E96 | H̱ | 2 |
| ẗ | U+1E97 | T̈ | 2 |
| ẘ | U+1E98 | W̊ | 2 |
| ẙ | U+1E99 | Y̊ | 2 |
| ẚ | U+1E9A | Aʾ | 2 |
| ff | U+FB00 | FF | 2 |
| fi | U+FB01 | FI | 2 |
| fl | U+FB02 | FL | 2 |
| ffi | U+FB03 | FFI | 3 |
| ffl | U+FB04 | FFL | 3 |
| ſt | U+FB05 | ST | 2 |
| st | U+FB06 | ST | 2 |
Two groups stand out. The first is ß, the German sharp s, which is the only one of these that appears in ordinary running text — and German is not a rare language to be re-casing. The second is the typographic ligatures ff, fi, fl, ffi, ffl, ſt and st: single characters that look like two or three letters and uppercase into two or three letters. They arrive by accident, pasted out of a PDF where the typesetter used them, and they are a common cause of text that mysteriously gains characters or fails a search.
Measured, on real words
| Word | Uppercase | Before | After | Change |
|---|---|---|---|---|
| Straße | STRASSE | 6 | 7 | +1 |
| Fußball | FUSSBALL | 7 | 8 | +1 |
| Weißbierstraße | WEISSBIERSTRASSE | 14 | 16 | +2 |
| Grüße | GRÜSSE | 5 | 6 | +1 |
| file | FILE | 3 | 4 | +1 |
| fflicker | FFLICKER | 6 | 8 | +2 |
| All six | 41 | 49 | +8 |
Weißbierstraße is 14 characters and becomes 16. If that string is going into a field with a hard limit, the limit has to be checked after the conversion, not before it.
Uppercase is a one-way door
Case conversion throws information away, and uppercase throws away the most. Once a sentence is in
capitals, nothing in the text records which words were proper nouns, which were acronyms, or which
ß was really a ß. Lowercasing afterwards gives you a plausible string, not your string:
STRASSE comes back as strasse, and NASA comes back as
nasa.
This is why the tool has an Undo button and never asks you to convert back. Undo restores the exact characters from before the last conversion, including everything the transform would have destroyed. It stacks, so several conversions can be walked back one at a time.
When to convert, and when to use CSS instead
On the web, an uppercase look and uppercase text are different things, and the difference matters more than it sounds.
- Style it with
text-transform: uppercasewhen the capitals are presentation: nav items, buttons, small caps headings. The underlying text stays normal, so copy-paste gives the reader ordinary words, search still matches, and assistive technology reads the sentence out as a sentence instead of spelling it. - Convert it when the value itself must be uppercase: a coupon code, an environment-variable name, a constant in source, a legacy field that rejects lowercase, a spreadsheet column being normalised for a join.
There is a readability cost to real capitals too. Lowercase letters have ascenders and descenders that give words distinct shapes; capitals are all the same height, which removes that cue. It is why all-caps paragraphs feel slower to read — fine for four words on a button, punishing for a paragraph of forty.
What passes through untouched
Uppercase only affects characters that have a case. Digits, punctuation, spaces and emoji are unchanged, and so are entire scripts that do not distinguish case: Chinese, Japanese, Korean, Arabic, Hebrew, Devanagari and Thai all come out exactly as they went in. Mixed text works fine — the cased letters convert and everything else stays put.
One script does change behaviour by language: Turkish. Uppercasing i gives
I in English and İ in Turkish, because Turkish treats the dotted and
dotless i as separate letters. Tick Turkish i rules to switch the tool between them; the
difference is explained in full on the
main case converter page.