JavaRush /Курсы /C# SELF /Экранирование, спецсимволы и строковая интерполяция

Экранирование, спецсимволы и строковая интерполяция

C# SELF
9 уровень , 1 лекция
Открыта

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" не найден.
2
Задача
C# SELF, 9 уровень, 1 лекция
Недоступна
Использование спецсимволов и дословной строки
Использование спецсимволов и дословной строки
2
Задача
C# SELF, 9 уровень, 1 лекция
Недоступна
Многострочный текст и Unicode-символы
Многострочный текст и Unicode-символы
Комментарии (1)
ЧТОБЫ ПОСМОТРЕТЬ ВСЕ КОММЕНТАРИИ ИЛИ ОСТАВИТЬ КОММЕНТАРИЙ,
ПЕРЕЙДИТЕ В ПОЛНУЮ ВЕРСИЮ
Ra Уровень 35 Student
7 сентября 2025
Насколько я понимаю, реальную длину строки даёт StringInfo