1. Wichtige Sonderzeichen und Escaping
In der Programmierung bestehen Strings nicht nur aus Buchstaben, sondern auch aus speziellen Zeichen: Anführungszeichen, Zeilenumbrüche, Tabs und manchmal sogar Zeichen wie \n und \t. Aber wenn du in einem String Hallo, "user"! schreiben willst, fragt der Compiler sofort: „Und die Anführungszeichen im String – ist das ein Fehler?“. Genau hier brauchst du das Escaping.
In C# ist Escaping eine Möglichkeit, „eine besondere Behandlung“ für bestimmte Zeichen im String anzugeben. Dafür benutzt man den Backslash \ (auf Englisch „backslash“).
Klassische Sonderzeichen
| Sequenz | Beschreibung | Demo |
|---|---|---|
| \n | Zeilenumbruch | Enter gedrückt |
| \t | Tabulator | Tab |
| \\ | Buchstäblich „Backslash“ | \ |
| \" | Anführungszeichen im String | " |
| \' | Einfaches Anführungszeichen (selten in Strings nötig) | ' |
| \r | Carriage Return (alter Zeilenumbruch, selten genutzt) | |
| \0 | Null-Zeichen | (Unsichtbar) |
| \b | Backspace (löscht das vorherige Zeichen – funktioniert nicht immer in der Konsole) |
Wie funktioniert das?
Lass uns ein paar Zeilen mit escaped Zeichen schreiben, um zu sehen, wie das läuft.
Console.WriteLine("Hallo, \"Benutzer\"!");
// Ausgabe: Hallo, "Benutzer"!
Console.WriteLine("C:\\Program Files\\MyApp");
// Ausgabe: C:\Program Files\MyApp
Console.WriteLine("Zeile 1\nZeile 2");
// Ausgabe:
// Zeile 1
// Zeile 2
Console.WriteLine("Ich\tliebe\tTabs!");
// Ausgabe:
// Ich liebe Tabs!
So kannst du mit einem einfachen Backslash (\) fast jedes Sonderzeichen in deinen String „schmuggeln“, ohne dass der Compiler oder dein Teamkollege ausflippt.
2. Normale und verbatim Strings (@-Strings)
Und was, wenn du ganz oft Backslashes schreiben musst – zum Beispiel bei Dateipfaden? Jedes Mal \\ zu tippen, ist echt nichts für schwache Nerven. Zum Glück gibt’s in C# verbatim String-Literale, die mit @ anfangen.
Wie sieht das aus?
string path = "C:\\Users\\Ann\\Documents\\";
string verbatimPath = @"C:\Users\Ann\Documents\";
In verbatim Strings brauchst du kein Escaping – der Backslash ist einfach ein normales Zeichen. Aber Achtung: Anführungszeichen im String musst du doppelt schreiben!
string quote = @"Das ist ein verbatim String mit Anführungszeichen: ""Hello""!";
Console.WriteLine(quote);
// Ausgabe: Das ist ein verbatim String mit Anführungszeichen: "Hello"!
Visueller Vergleich
| Stil | Syntax | Wie funktioniert’s |
|---|---|---|
| Normal | "C:\\Folder\\File.txt" | Jeder \ ist doppelt |
| Verbatim (@) | @"C:\Folder\File.txt" | Alle \ sind normal |
| Verbatim mit Anführungszeichen | @"Text mit ""Anführungszeichen"" drin" | Anführungszeichen sind doppelt |
Profi-Tipp: Verwende verbatim Strings für Dateipfade, mehrzeiligen Text und Regex-Templates.
3. Zeilenumbrüche und mehrzeilige Strings
Oft musst du eine mehrzeilige Nachricht oder ASCII-Art schreiben. Der direkteste Weg: \n im normalen String oder verbatim Literale nutzen. Ein verbatim Literal speichert alle Zeichen so, wie sie sind, inklusive Zeilenumbrüchen. Beispiel:
Console.WriteLine("Erste Zeile\nZweite Zeile");
Console.WriteLine(@"Mehrzeiliger String.
Hier brauchst du keine escaped Zeilenumbrüche
Und sogar Tabs bleiben wie sie sind.");
Außerdem gibt’s in C# jetzt raw string literals (drei Anführungszeichen), mit denen du mehrzeiligen Text schreiben kannst, ohne Anführungszeichen zu verdoppeln. Beispiel:
string json = """
{
"name": "Alice",
"age": 30,
"skills": ["C#", "SQL", "Azure"]
}
""";
Console.WriteLine(json);
4. Unicode – wie C# alle Zeichen der Welt speichert
Heute arbeiten wir nicht nur mit dem lateinischen Alphabet, sondern auch mit Kyrillisch, chinesischen Schriftzeichen, mathematischen Symbolen und sogar Emojis. Das geht alles dank dem Zeichencodierungs-System Unicode.
Was ist Unicode?
Unicode ist ein internationaler Standard, der jedem Zeichen eine eindeutige Nummer (Codepoint) zuweist, egal welche Sprache oder Plattform. So kannst du in C# problemlos kyrillischen Text, Englisch, chinesische Schriftzeichen und sogar seltene Sonderzeichen mischen.
Beispiel für einen String in verschiedenen Sprachen:
Console.WriteLine("Hello, Welt! 你好! مرحبا!");
Unicode-Zeichen in Strings
Du kannst direkt alle Zeichen schreiben, die dein Encoding unterstützt, oder Escape-Sequenzen wie \uXXXX nutzen, wobei XXXX ein vierstelliger Hex-Code ist.
Console.WriteLine("Zeichen: \u263A"); // Gibt ☺ aus
Für Zeichen mit Code größer als 65535 (z.B. viele Emojis) nutzt man \UXXXXXXXX (8 Stellen):
Console.WriteLine("Smiley: \U0001F60A"); // Gibt 😊 aus
Was bringt dir das?
- Du kannst jeden beliebigen Text speichern und verarbeiten.
- Keine Angst vor Sprachmix oder exotischen Zeichen – C# und .NET unterstützen Unicode „out of the box“.
- Superwichtig, wenn du mit internationalen Usern und ungewöhnlichen Alphabeten arbeitest.
5. Emojis und Sonderzeichen in Strings
Moderne Strings sind nicht nur Buchstaben, sondern auch Emojis! Zum Beispiel willst du dem User eine fröhliche Nachricht mit einem „Smiley“ schicken.
Wie füge ich ein Emoji in einen String ein?
Füge das Emoji direkt in den String ein:
Kopiere einfach das gewünschte Emoji (z.B. 😊, 🚀, 🐱) und füge es in deinen String-Literal ein:
Console.WriteLine("Hallo! 😊");
Nutze Unicode-Codes:
Für die meisten Emojis nutze \U und den 8-stelligen Code.
Console.WriteLine("Hier ist eine Katze: \U0001F431"); // 🐱
Emoji-Codes findest du in Unicode-Tabellen online.
Besonderheiten bei Emojis
Emojis können 2 oder mehr Zeichen im String belegen (weil ihr Unicode-Code größer als 16 Bit ist).
Bei manchen Operationen (z.B. String-Länge) gibt’s Überraschungen:
string s = "😊";
Console.WriteLine(s.Length); // Kann 2 statt 1 ausgeben!
Das liegt daran, dass der Codepoint dieses Smileys mit zwei Zeichen kodiert wird.
Beim Ausgeben in der Konsole oder auf einer Webseite werden die meisten Emojis korrekt angezeigt, wenn dein System und die Schriftart sie unterstützen.
Beispiel: String mit Emojis ausgeben
Console.WriteLine("Glückwunsch zum Erfolg! 🎉 Du bist super! 🚀");
6. Stolperfallen und typische Fehler
Anfänger verwechseln oft das Escaping von Anführungszeichen und Backslashes. Wenn du das Escaping vergisst, denkt der Compiler, dass dein String zu früh endet.
Fehler:
Console.WriteLine("Er sagte: "Hallo!""); // Fehler! Compiler-Panik.
Richtig:
Console.WriteLine("Er sagte: \"Hallo!\"");
Oder wenn du einen Dateipfad ausgeben willst, machen manche das so:
Console.WriteLine("C:\Temp\file.txt"); // Gibt Fehler oder unerwartetes Ergebnis, z.B.: C: emp ile.txt
Denn \t und \f sind Sonderzeichen (Tab und Form Feed). Du kannst das auf zwei Arten fixen:
Console.WriteLine("C:\\Temp\\file.txt"); // Doppelte Backslashes
Console.WriteLine(@"C:\Temp\file.txt"); // Verbatim String
Wichtig: Wenn du einen verbatim String nutzt, aber Anführungszeichen brauchst, musst du sie doppelt schreiben:
Console.WriteLine(@"Datei ""config.txt"" nicht gefunden."); // Datei "config.txt" nicht gefunden.
GO TO FULL VERSION