3tej home

What is Uppercase Converter?

A Uppercase Converter converts data from one format to another using a deterministic mapping. It parses the input, transforms it according to the relevant standard, and returns a ready-to-use result. Paste any text and instantly convert it to ALL CAPS.

Uppercase Converter

Paste any text and convert it to ALL UPPERCASE in one click. Works offline.

Browser-onlyInstantFree foreverWorks offlineNo signup
← Utilities

TLDR

Paste text, press Convert, get the same text in ALL CAPS. Numbers, punctuation, and whitespace are untouched.

0 words · 0 chars
Runs entirely in your browser. No upload, no signup, no logging. Output is for personal or commercial use; we don't claim any rights.

About the uppercase converter

An uppercase converter folds every cased letter in a string to its capital form using the Unicode Simple Uppercase Mapping. Digits, punctuation, whitespace, emoji, and most symbols pass through unchanged because they have no case. The result is the canonical form for SCREAMING_SNAKE_CASE constants in C, Java, JavaScript, Python and Ruby, environment variable names in POSIX shells (PATH, HOME, LANG), legal document headings, traffic-sign typography, newspaper headlines in many traditions, and marketing banners where emphasis without italics or bold is wanted.

This page runs the standard ECMA-262 String.prototype.toUpperCase() entirely in your browser. The implementation walks code points, looks each one up in the Unicode case-folding table (UnicodeData.txt field 12, the Simple Uppercase Mapping), and emits the upper form. It is locale-insensitive by design, which is the right behaviour for code identifiers and structured data; for natural-language text in Turkish, German, or Lithuanian, use the locale-aware version inside your editor instead.

How it works under the hood

output[i] = simpleUpperMap(codePoint(input[i]))
// Unicode case folding, not locale-aware
// One-to-many expansions (ß -> SS) are handled
// Surrogate pairs iterated correctly
  • Code-point iteration. The runtime walks UTF-16 code units but joins surrogate pairs into single code points so astral characters (emoji, mathematical alphanumeric, ancient scripts) are handled atomically.
  • Simple case mapping. Most code points use the one-to-one simple mapping. Lowercase a (U+0061) becomes capital A (U+0041), lowercase e-acute (U+00E9) becomes capital E-acute (U+00C9).
  • One-to-many expansions. A small set of characters expand: ß becomes SS, fi ligature (U+FB01) becomes FI, the Croatian dz digraph (U+01F3) becomes DZ. The output is longer than the input in code points for these.
  • No locale tag. Plain toUpperCase ignores BCP 47 language tags. Turkish dotted-i, Lithuanian dot-above, and Greek final-sigma rules all require toLocaleUpperCase('xx').

Worked example

Input: a mixed paragraph copied from a draft email.

Reminder: Café Müller closes Sun at 6pm. Order at https://cafe-mueller.de
  1. Code-point walk. The runtime sees each character once. C, a, f, é, M, ü, l, l, e, r and so on. The acute and umlaut combine cleanly because the input is precomposed NFC.
  2. Apply mapping. Lowercase letters fold to capitals. é becomes É (U+00C9), ü becomes Ü (U+00DC). Digits 6 and the colon, dot, slash, hyphen pass through.
  3. URL flattens too. Hostname cafe-mueller.de becomes CAFE-MUELLER.DE, which is fine for DNS lookup but may break case-sensitive paths on Linux hosts.
Result: REMINDER: CAFÉ MÜLLER CLOSES SUN AT 6PM. ORDER AT HTTPS://CAFE-MUELLER.DE
Acronym-style output suitable for a banner heading, a marquee, or a SCREAMING_SNAKE_CASE constant.

If the input had used the German sharp s (Straße), the default mapping would produce STRASSE, two letters where there was one. Notice it is the only common case where the output is longer than the input in characters.

What uppercases and what does not

Input classUppercase outputNotes
Latin a-zA-ZASCII fast path
Latin-1 accented (à, ç, ñ)À, Ç, ÑUnicode aware
German ßSS (two chars)Capital ẞ only with locale 'de'
Greek (α, σ, ω, final ς)Α, Σ, Ω, ΣFinal sigma loses distinction
Cyrillic (д, ж, я)Д, Ж, ЯRussian, Ukrainian, Bulgarian, Serbian
Turkish i and ıI and IShould be İ and I with locale 'tr'
Ligatures (fi, fl, st)FI, FL, STDecomposed into two letters
Digits, punctuation, symbolsunchangedNo case
Emoji, CJK, kana, hangulunchangedNo case

Pitfalls to watch for

  • All-caps body copy hurts readability. Tinker's mid-century legibility studies and modern eye-tracking research both find reading speed drops 10 to 20 percent because the eye loses word-shape cues. Reserve uppercase for short headings and short banner phrases.
  • Screen readers may spell out runs of capitals. NVDA and VoiceOver treat all-caps strings longer than two characters as initialisms in some configurations, spelling them out letter by letter. Set ARIA attributes if you must use long uppercase strings.
  • German ß doubles in length. Straße becomes STRASSE, six letters from five. If a downstream system reserves fixed-width columns, the output may overflow.
  • Turkish output looks wrong. The default mapping i to I is incorrect Turkish. For Istanbul use toLocaleUpperCase('tr') or restore manually.
  • Code identifiers break. Uppercase a Java variable userName to USERNAME and the program either fails to compile or references a different identifier. Never run code through case converters unless you understand the consequences.
  • URL paths are case-sensitive on Linux. Lowercase /assets and uppercase /ASSETS are different files on Apache and nginx defaults. Convert only the scheme and host of a URL, not the path.

Related case-conversion tools

Frequently asked questions

Does it follow Turkish dotted-I rules and other locale-specific uppercase mappings?

No. Plain toUpperCase() is locale-insensitive and maps lowercase i (U+0069) to capital I (U+0049). Turkish expects lowercase dotted i to map to capital dotted İ (U+0130) and lowercase dotless ı to map to capital I, which only happens with toLocaleUpperCase('tr'). Lithuanian dot-above rules and Greek final sigma (ς to Σ) also need the locale-aware variant; this generic tool uses the default.

How does it treat the German sharp s (ß)?

The default Unicode rule maps lowercase ß (U+00DF) to the two-letter sequence SS, so 'straße' becomes 'STRASSE'. Since Unicode 5.1 a capital ẞ (U+1E9E) exists and the Council for German Orthography formally accepted it in 2017, but it only appears with toLocaleUpperCase('de') or after manual replacement. The double-S form is what road signs, passports, and most software actually use.

Does it preserve emoji, digits, and punctuation byte-for-byte?

Yes. Code points that have no uppercase form (digits, punctuation, spaces, emoji, CJK ideographs, kanji, kana, hangul, mathematical symbols) pass through unchanged. The converter only touches cased characters (categories Lu, Ll, Lt in Unicode), so the structure of your text including line breaks, tabs, and special characters is preserved exactly.

Why is ALL CAPS bad for body copy and accessibility?

Studies by Larson and Picard at Microsoft Research and Tinker's classic legibility work both find that all-caps text reduces reading speed by 10 to 20 percent because the eye loses the word-shape cues from x-height and ascenders. Screen readers may also spell out all-caps strings letter by letter, treating them as initialisms. Reserve uppercase for short headings, banners, acronyms, and SCREAMING_SNAKE_CASE constants.

Is the conversion done in my browser and how large a paste can it handle?

Entirely in your browser. Nothing is uploaded. String.prototype.toUpperCase() is implemented in optimised C++ in V8, JavaScriptCore, and SpiderMonkey, so it processes a million characters in under 50 milliseconds on a modern laptop. The practical limit is the size of a textarea your browser will hold, typically tens of megabytes in Chrome and Firefox before the UI starts to lag.