Why toUpperCase() Breaks on Turkish and German Text
Converting text between uppercase, lowercase, and title case looks like the simplest possible string operation — swap each letter for its counterpart, done. In English, that assumption mostly holds. Outside English, it breaks in specific, well-documented ways that trip up a lot of naive case-conversion code, because 'uppercase version of this letter' isn't actually a locale-independent, one-to-one mapping the way it feels like it should be.
Here are the two most common edge cases, and why they happen.
Turkish: two different letter 'i's
Turkish has two distinct versions of the letter I that don't map onto English rules at all: a dotted İ/i pair and a separate dotless I/ı pair, treated as entirely different letters, not variants of the same one. A case converter using default (locale-independent) rules will uppercase the lowercase 'i' to 'I' — correct in English, wrong in Turkish, where lowercase 'i' should uppercase to 'İ' (dotted capital I), and the dotless 'ı' should uppercase to plain 'I'. Get this wrong in a Turkish-language product and words visibly misspell themselves every time text gets uppercased — a well-known enough problem in software localization that it has its own name, 'the Turkish-I problem.'
German: ß has no single-character uppercase, historically
German's ß (Eszett, or sharp S) traditionally has no uppercase single-character equivalent at all — the standard uppercase conversion has long been the two-character 'SS,' meaning 'straße' becomes 'STRASSE,' not a made-up single capital-ß symbol. This means uppercasing can change a string's length, which breaks any code that assumes case conversion is length-preserving — fixed-width display fields, certain string-comparison logic, and layout code that reserves space based on the original string's character count. A dedicated uppercase ẞ (capital Eszett) exists in modern Unicode, and some systems now support it, but 'SS' remains the far more common and widely-expected conversion, and any converter needs to actually implement this special case rather than treating ß as an ordinary letter with a normal one-to-one uppercase mapping.
The general lesson: case conversion needs locale awareness
Both problems come from the same root cause: naive case conversion assumes a fixed table of one letter mapping to exactly one other letter, and that assumption is a specifically English-shaped one that doesn't generalize. Correct handling requires locale-aware conversion rules (Turkish needs its own dotted/dotless logic) and accepting that some conversions are genuinely one-character-to-two (German ß to SS), not a uniform character swap. Software that only ever handles English text can usually ignore this; anything localizing into Turkish or German specifically cannot.
Convert case in your browser
Our Case Converter tool handles uppercase, lowercase, title case, sentence case, camelCase, and snake_case conversions instantly, entirely client-side.