1. Основные спецсимволы и экранирование
В программировании строки состоят не только из букв, но и специальных символов: кавычки, переводы строки, табуляции, а иногда даже значки типа \n и \t. Но если вы захотите написать в строке Привет, "user"!, компилятор сразу же спросит: «А кавычки внутри строки — это что, ошибка?». Вот тут и нужен механизм экранирования.
В C# экранирование — это способ "указывать особое отношение" к некоторым символам внутри строки. Для этого используется обратный слэш \ (он же «backslash»).
Классические спецсимволы
| Последовательность | Описание | Демонстрация |
|---|---|---|
| \n | Перенос строки | Нажал Enter |
| \t | Табуляция | Таб |
| \\ | Буквально "обратный слэш" | \ |
| \" | Кавычка внутри строки | " |
| \' | Одинарная кавычка (редко нужно в строках) | ' |
| \r | Возврат каретки (старый стиль переноса строки, редко используется) | |
| \0 | Null-символ | (Невидимый) |
| \b | Backspace (удаляет предыдущий символ — в консоли работает не всегда) |
Как это работает
Давайте напишем пару строк с экранированными символами, чтобы увидеть их в действии.
Console.WriteLine("Привет, \"Пользователь\"!");
// Вывод: Привет, "Пользователь"!
Console.WriteLine("C:\\Program Files\\MyApp");
// Вывод: C:\Program Files\MyApp
Console.WriteLine("Строка 1\nСтрока 2");
// Вывод:
// Строка 1
// Строка 2
Console.WriteLine("Я\tлюблю\tтабуляцию!");
// Вывод:
// Я люблю табуляцию!
Вот так, с помощью одной простой черточки (\), вы можете «протащить» в строку почти любой спецсимвол, не вызывая панику у компилятора или коллеги по команде.
2. Обычные и дословные строки (@-строки)
А что если вам нужно много раз писать обратный слэш — например, в путях к файлам? Каждый раз делать \\ — это не для слабонервных. К счастью, в C# есть дословные строковые литералы (verbatim strings), которые начинаются с символа @.
Как это выглядит?
string path = "C:\\Users\\Ann\\Documents\\";
string verbatimPath = @"C:\Users\Ann\Documents\";
В дословных строках экранирование не требуется — слэш считается обычным символом. Но есть нюанс: кавычки внутри таких строк писать нужно удвоенно!
string quote = @"Это дословная строка с кавычками: ""Hello""!";
Console.WriteLine(quote);
// Вывод: Это дословная строка с кавычками: "Hello"!
Визуальное сравнение
| Стиль | Синтаксис | Как работает |
|---|---|---|
| Обычный | "C:\\Folder\\File.txt" | Каждый \ — двойной |
| Дословный (@) | @"C:\Folder\File.txt" | Все \ — обычные |
| Дословный с кавычками | @"Text с ""кавычками"" внутри" | Кавычки — двойные |
Профессиональный лайфхак: используйте дословные строки для путей файлов, многострочного текста и шаблонов регулярных выражений.
3. Переносы строк и многострочные строки
Очень часто нужно написать многострочное сообщение или ASCII-арт. Самый прямолинейный способ — воспользоваться \n в обычной строке или дословными литералами. Дословный литерал сохраняет все символы как они есть, включая перенос строк. Пример:
Console.WriteLine("Первая строка\nВторая строка");
Console.WriteLine(@"Многострочная строка.
В которой не нужны экранированные переносы
И даже табуляции работают как есть.");
Также в C# недавно появились raw string literals (тройные кавычки), которые тоже позволяют записывать многострочный текст, но без дублирования кавычек. Пример:
string json = """
{
"name": "Alice",
"age": 30,
"skills": ["C#", "SQL", "Azure"]
}
""";
Console.WriteLine(json);
4. Unicode — как в C# хранятся любые символы мира
В современном мире мы работаем не только с латинским алфавитом, но и с кириллицей, иероглифами, математическими символами и даже эмодзи. Всё это возможно благодаря системе кодирования символов — Unicode.
Что такое Unicode?
Unicode — это международный стандарт, который присваивает уникальный номер (code point) каждому символу, независимо от языка и платформы. Благодаря этому вы можете легко использовать в C# одновременно кириллический текст, английский, китайские иероглифы и даже редкие спецсимволы.
Пример строки на разных языках:
Console.WriteLine("Hello, мир! 你好! مرحبا!");
Unicode-символы в строках
Вы можете напрямую писать любые символы, поддерживаемые вашей кодировкой, или использовать escape-последовательности вида \uXXXX, где XXXX — 4-значный шестнадцатеричный код символа.
Console.WriteLine("Символ: \u263A"); // Выведет ☺
Для символов с кодом больше 65535 (например, многие смайлики), используется \UXXXXXXXX (8 цифр):
Console.WriteLine("Смайлик: \U0001F60A"); // Выведет 😊
Что это вам дает?
- Вы можете хранить и обрабатывать любой текст.
- Не бойтесь смешивать языки и использовать нестандартные символы — C# и .NET поддерживают Unicode “из коробки”.
- Особенно важно при работе с международными пользователями и нестандартными алфавитами.
5. Смайлики и спецсимволы в строках
Современные строки — это не только буквы, но и эмодзи! Например, вы хотите отправить пользователю весёлое сообщение с “улыбочкой”.
Как добавить смайлик в строку?
Вставьте эмодзи напрямую в строку:
Просто скопируйте нужный смайлик (например, 😊, 🚀, 🐱) и вставьте в строковый литерал:
Console.WriteLine("Привет! 😊");
Используйте Unicode-коды:
Для большинства смайликов используйте \U и 8-значный код.
Console.WriteLine("Вот котик: \U0001F431"); // 🐱
Коды эмодзи можно найти в онлайн-таблицах Unicode.
Особенности работы со смайликами
Смайлики могут занимать 2 или более символов в строке (так как их Unicode-код больше 16 бит).
Для некоторых операций (например, поиск длины строки) могут быть “сюрпризы”:
string s = "😊";
Console.WriteLine(s.Length); // Может вывести 2, а не 1!
Это связано с тем, что codepoint этого смайлика кодируется двумя символами.
При выводе в консоль или на веб-страницу большинство эмодзи отображаются корректно, если ваша система и шрифт поддерживают их.
Пример вывода строки с эмодзи
Console.WriteLine("Поздравляем с успехом! 🎉 Вы молодец! 🚀");
6. Подводные камни и частые ошибки
Начинающие часто путаются с экранированием кавычек и обратных слэшей. Например, если забыть про экранирование, компилятор подумает, что вы закончили строку раньше времени.
Ошибка:
Console.WriteLine("Он сказал: "Привет!""); // Ошибка! Компилятор в панике.
Правильно:
Console.WriteLine("Он сказал: \"Привет!\"");
Или, если нужно вывести путь к файлу, иногда делают так:
Console.WriteLine("C:\Temp\file.txt"); // Будет ошибка или неожиданный результат, например: C: emp ile.txt
Потому что \t и \f — это спецсимволы (табуляция и перевод формата). Исправить можно двумя основными способами:
Console.WriteLine("C:\\Temp\\file.txt"); // Двойные слэши
Console.WriteLine(@"C:\Temp\file.txt"); // Дословная строка
Важно помнить: если вы используете дословную строку, но в ней нужны кавычки, их нужно удваивать:
Console.WriteLine(@"Файл ""config.txt"" не найден."); // Файл "config.txt" не найден.
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ