Die Groß- und Kleinschreibung eines Textes zu ändern klingt nach der trivialsten Operation, die ein Computer ausführt. Ist sie nicht — und die Arten, wie sie schiefgeht, haben echte Software zerlegt. Dieses Tool wandelt zwischen zehn Konventionen auf einmal um. Einige dieser Umwandlungen werfen jedoch Information dauerhaft weg, und es lohnt zu wissen, welche.
Großschreiben ist eine Einbahntür
Die meisten nehmen an, Groß-/Kleinschreibung sei umkehrbar. Ist sie nicht. Das ß hat keine eigene Großform, das Großschreiben macht daraus also zwei Buchstaben: aus straße wird STRASSE. Ein Zeichen wurde zu zweien.
Nun zurück. STRASSE klein geschrieben ist strasse — mit ss, nicht ß. Der ursprüngliche Buchstabe ist weg, und nichts holt ihn zurück, denn beim Kleinschreiben gibt es keinen Vermerk mehr, dass diese zwei S einmal ein ß waren. Ein deutsches Wort durch die Großschreibung zu schicken ändert stillschweigend seine Schreibung.
Die Ligatur fi macht dasselbe und wird zu FI. Deshalb verliert eine Datenbankspalte, die eine großgeschriebene Kopie eines Namens zum Suchen hält, klammheimlich Information — und deshalb ist der Vergleich zweier Texte über Großschreibung beider Seiten eine subtil schlechtere Idee, als sie aussieht.
Das türkische I, das Produktionssysteme lahmgelegt hat
Das Türkische kennt zwei Buchstaben I: eines mit Punkt und eines ohne, und es sind verschiedene Buchstaben mit verschiedener Bedeutung. Das große gepunktete i ist İ. Das kleine punktlose I ist ı.
Das kollidiert mit einer Gewohnheit, die jeder Entwickler hat. In JavaScript ergibt "title".toUpperCase() TITLE. Aber "title".toLocaleUpperCase("tr") ergibt TİTLE — mit Punkt auf dem I. Hat ein Nutzer ein türkisches Locale und dein Code schreibt eine Zeichenkette groß, um sie gegen eine Konstante zu vergleichen, scheitert der Vergleich — und zwar nur für türkische Nutzer. Umgekehrt gilt dasselbe: "I".toLocaleLowerCase("tr") ist ı, nicht i.
Das hat echte Software wiederholt zu Fall gebracht. Die Regel dagegen: Groß-/Kleinumwandlung zum Vergleichen muss locale-unabhängig sein, zum Anzeigen soll sie dem Locale des Nutzers folgen. Es sind verschiedene Operationen, die zufällig einen Namen teilen. Dieses Tool wandelt zur Anzeige und gibt nicht vor, eine Vergleichsfunktion zu sein.
Akronyme überleben eine Richtung, die andere nicht
Einen camelCase-Bezeichner in Wörter zu zerlegen ist heikler, als es aussieht, denn eine Folge von Großbuchstaben könnte ein Akronym sein. Ein naiver Schnitt an jeder Majuskel macht aus parseHTMLDocument ein parse_h_t_m_l_document, was Unsinn ist.
Dieses Tool kommt damit zurecht: parseHTMLDocument wird parse_html_document, XMLHttpRequest wird xml_http_request, getUserID wird get_user_id. Es sucht die Grenze, wo eine Folge von Großbuchstaben auf eine Majuskel gefolgt von Kleinbuchstaben trifft — dort endet das Akronym und beginnt das nächste Wort.
Der Rückweg kann nicht funktionieren, und das gehört verstanden statt als Fehler gemeldet. Wandle parse_html_document zurück in camelCase und du bekommst parseHtmlDocument, nicht parseHTMLDocument. Die snake_case-Form hat nie vermerkt, dass html ein Akronym war — diese Information wurde auf dem Hinweg zerstört, und keine Cleverness auf dem Rückweg kann sie erfinden. Wandelst du Bezeichner in einer Codebasis um, wandle einmal und lies gegen, statt hin und her zu gehen und zu vertrauen.
Title Case ist keine definierte Operation
Bitte zwei Stilhandbücher, denselben Satz in Title Case zu setzen, und du bekommst zwei Antworten. Der AP-Stil schreibt Wörter ab vier Buchstaben groß. Chicago schreibt alles groß außer Artikeln, nebenordnenden Konjunktionen und kurzen Präpositionen — es sei denn, sie stehen zuerst oder zuletzt. Keiner sagt "jedes Wort groß".
Genau das tut dieses Tool, denn es ist die einzige Regel, die ohne Kenntnis deines Stilhandbuchs, deiner Sprache oder der Eigennamen funktioniert. Eine vernünftige Vorgabe — und kein echtes Title Case: Du bekommst "The Lord Of The Rings", und Chicago würde sagen, es heißt "The Lord of the Rings". Für Überschriften, die zählen, nimm die Ausgabe als Ausgangspunkt und richte die kleinen Wörter von Hand.
Häufige Fragen
Wird mein Text an einen Server geschickt?
Nein. Dieses Tool ist als "client" gekennzeichnet: Jede Umwandlung läuft in deinem Browser-Tab, es wird nichts übertragen.
Welche Schreibweise nehme ich wofür?
Folge der Sprache, nicht deiner Vorliebe — jedes Ökosystem hat eine Konvention, und dagegen anzukämpfen lässt deinen Code fremd wirken. camelCase für JavaScript- und Java-Variablen, PascalCase für Klassen und Komponenten, snake_case für Python und Datenbankspalten, kebab-case für URLs und CSS, CONSTANT_CASE für Konstanten und Umgebungsvariablen. Der einzige Ort zum Nachdenken statt Folgen sind URLs, wo kebab-case nicht nur Konvention ist: Unterstriche sind unter der Unterstreichung eines Links schwerer zu sehen.
Warum hat mein deutsches Wort die Schreibung geändert?
Du hast ein ß großgeschrieben. Es wurde zu SS, und das Kleinschreiben brachte ss statt ß zurück, weil die Information im ersten Schritt verloren ging. Das ist keine Schlamperei dieses Tools — es ist, was Unicode vorschreibt, und jede korrekte Implementierung tut dasselbe. Brauchst du das Original, behalte das Original; rekonstruiere es nicht aus einer großgeschriebenen Kopie.
Ist Großschreibung sicher zum Vergleichen zweier Zeichenketten?
Nicht verlässlich. Über das türkische Problem oben hinaus gibt es Zeichen, deren Groß- und Kleinformen nicht sauber hin- und zurückgehen, sodass zwei Zeichenketten großgeschrieben gleich werden können, obwohl sie verschieden sind — und umgekehrt. Zum Vergleichen nimm ein locale-unabhängiges Case-Fold: In JavaScript ist localeCompare mit sensitivity auf "base" oder "accent" meist das, was du wirklich willst.
Warum sieht mein Sentence Case bei Namen falsch aus?
Weil Sentence Case alles nach dem ersten Zeichen kleinschreibt und keine Möglichkeit hat zu wissen, dass Paris ein Ort ist. Aus "JOHN FUHR NACH PARIS" wird "John fuhr nach paris". Eigennamen zurückzuholen braucht ein Wörterbuch und bei Zweifelsfällen einen Menschen. Wurde dein Text in Großbuchstaben geschrien, bringt dich Sentence Case fast ans Ziel, und die Namen brauchen einen Blick.