# Case sensitivity

Der englische Ausdruck case sensitivity bezeichnet in der elektronischen Datenverarbeitung allgemein die Art und Weise, in der eine Benutzerschnittstelle oder Programmiersprache die Unterscheidung von Groß- und Kleinbuchstaben handhabt. Das Wort leitet sich von „(letter) case“ für „Fach“ ab, abgeleitet von den Fächern (englisch type cases) des Setzkastens, in denen Drucker die verschiedenen Drucklettern aufbewahrten, und „(in)sensitivity“ für „(Un-)Empfindlichkeit bzw. (Un-)Abhängigkeit“.
Konkret bedeutet case-sensitive (eingedeutscht „case-sensitiv“), dass Majuskeln und Minuskeln als unterschiedlich angesehen werden. Das Gegenteil ist case-insensitive (eingedeutscht „case-insensitiv“).

## Problem

Viele Schriftsysteme unterscheiden Groß- und Kleinbuchstaben. Ob diese als identisch gelten oder unterschieden werden sollen, spielt vor allem dann eine Rolle, wenn eine Zeichenfolge etwas eindeutig bezeichnen soll (wie etwa einen Dateinamen) und bei der alphabetischen Sortierung.
Ein menschlicher Bibliothekar oder Nutzer eines Telefonbuchs versteht ohne weiteres Nachdenken den Groß- und Kleinbuchstaben als Varianten voneinander, da er die entsprechende kulturelle Konvention kennt. Ein Computer hingegen verwendet unterschiedliche interne Codes dafür – bei ASCII etwa den Binärwert 01000001 mit dem Dezimalwert 65 für den Großbuchstaben „A“ und den Binärwert 01100001 (dezimal 97) für den Kleinbuchstaben „a“. Um diese gleichzusetzen, sind zusätzliche Abfragen, Konvertierungen oder Vereinheitlichungen nötig.
Eine beiden Zahlenwerten innewohnende Verwandtschaft zueinander gibt es auf maschineller Ebene nur ansatzweise – bei der Festlegung der 8-Bit-ASCII-Codes war zwar darauf geachtet worden, dass sich die beiden Buchstaben nur in einem einzigen Bit unterscheiden. Dies gilt aber nicht für Buchstaben mit diakritischen Zeichen wie etwa die deutschen Umlaute. Um also auch eine nicht-sensitive Behandlung von Textdaten auf Rechensystemen verfügbar zu machen, muss durch Einsatz programmiertechnischer Mittel eine Abstraktionsschicht über das native Datenverständnis der Maschine gelegt werden, die das oben angesprochene menschliche Textverständnis nachahmt. Diese als Normalisierung bezeichnete Abstraktion blendet Unterschiede zwischen großen und kleinen Buchstaben aus.

### Dateisysteme

Ein bekanntes Beispiel für die unterschiedliche Behandlung von Textdaten sind die auf den Betriebssystemen Unix und Windows jeweils vorherrschenden Dateisysteme. Während die für Unix typischen Dateisysteme case-sensitiv sind, wurde Windows über längere Zeit mit Dateisystemen ausgeliefert, die nicht case-sensitiv waren. Zum Beispiel sind im geschichtlich aus der DOS-Vergangenheit stammenden Windows-Dateisystem FAT32 Name.txt und NAME.TXT ein und derselbe Dateiname (und somit dieselbe Datei), im Unix File System (UFS) unter z. B. BSD-Unix und im extended-Dateisystem unter Linux hingegen sind es zwei unterschiedliche Dateinamen. Das Windows-Dateisystem NTFS ist an sich case-sensitiv ausgelegt, der Zugriff auf Dateien im Betriebssystem bleibt jedoch (u. a. der Kompatibilität wegen) case-insensitiv. Damit ist auch das Anlegen von Dateien nicht möglich, die sich nur in der Groß- und Kleinschreibung unterscheiden. Allerdings speichern NTFS und die FAT-Erweiterung VFAT die bei der Erstellung oder Dateioperation verwendete Groß- und Kleinschreibung, die auch bei der Anzeige so wiedergegeben wird (englisch case-preserving).
Die von macOS verwendeten Dateisysteme HFS+ und APFS (ab macOS High Sierra) werden standardmäßig case-insensitive verwendet, können aber umgeschaltet werden. Unter iOS werden sie nur case-sensitive eingesetzt.
Dieses unterschiedliche Verhalten kann zu Problemen beim Datenaustausch auf Dateiebene führen, etwa bei physischen Datenträgern wie USB-Sticks oder in gemischten Netzwerken bei dem Versuch, zwei Dateien mit gleichem Dateinamen in unterschiedlicher Schreibung von einem Unix-System in dasselbe Verzeichnis eines Windows-Systems zu kopieren. Unerwartet kann auch eine Sortierung sein, die sich auf die Maschinen-interne Codierung verlässt und zunächst alle lateinischen Großbuchstaben, dann die lateinischen Kleinbuchstaben und schließlich die Buchstaben mit diakritischen Zeichen, hier aber jeder Großbuchstabe gefolgt vom zugehörigen Kleinbuchstaben, anordnet.
Auch im Internet kann der Nutzer auf dieses Phänomen stoßen: In einem URL ist die Domain immer case-insensitiv, der Dateipfad (der Teil hinter dem ersten Schrägstrich) hängt jedoch vom Server und dessen Betriebssystem ab. (Auch E-Mail-Adressen sind meist case-insensitiv.)

### Programmiersprachen

Ob case sensitivity vorliegt, ist auch bei Programmiersprachen von Bedeutung: Die Symbole sind bei C oder Perl abhängig von Groß-/Kleinschreibung, bei anderen Sprachen wie ooRexx, Pascal oder Visual Basic Classic jedoch nicht. Wieder andere Sprachen, beispielsweise PHP, verwenden unterschiedliche Prinzipien bei den Namen von Variablen und Funktionen.
Unterscheidet die Programmiersprache Groß- und Kleinbuchstaben, dann können Variablennamen wie RechnungSkonto und RechnungsKonto im selben Code verwendet werden; andernfalls kann dies zu verwirrenden Fehlern führen.

### Suche

Suchmaschinen verwenden immer eine eigene Datenbank, den „Index“. Alle zu durchsuchenden Texte werden dort typischerweise zweimal abgelegt – neben der Anzeigeversion eine für den Suchvorgang optimierte, („normalisierte“) Version, meist ausschließlich in Kleinbuchstaben. So kann der Vergleich beim eigentlichen Suchvorgang wesentlich beschleunigt werden.