C# Language
Строковые escape-последовательности
Поиск…
Синтаксис
- \ '- одинарная кавычка (0x0027)
- \ "- двойная кавычка (0x0022)
- \\ - обратная косая черта (0x005C)
- \ 0 - null (0x0000)
- \ a - alert (0x0007)
- \ b - backspace (0x0008)
- \ f - подача формы (0x000C)
- \ n - новая строка (0x000A)
- \ r - возврат каретки (0x000D)
- \ t - горизонтальная вкладка (0x0009)
- \ v - вертикальная вкладка (0x000B)
- \ u0000 - \ uFFFF - символ Юникода
- \ x0 - \ xFFFF - символ Юникода (код с переменной длиной)
- \ U00000000 - \ U0010FFFF - символ Юникода (для генерации суррогатов)
замечания
Последовательности escape-последовательности строк преобразуются в соответствующий символ во время компиляции . Обычные строки, которые содержат обратную косую черту, не преобразуются.
Например, строки notEscaped
и notEscaped2
ниже не преобразуются в символ новой строки, а остаются как два разных символа ( '\'
и 'n'
).
string escaped = "\n";
string notEscaped = "\\" + "n";
string notEscaped2 = "\\n";
Console.WriteLine(escaped.Length); // 1
Console.WriteLine(notEscaped.Length); // 2
Console.WriteLine(notEscaped2.Length); // 2
Управляющие последовательности символов Unicode
string sqrt = "\u221A"; // √
string emoji = "\U0001F601"; // 😁
string text = "\u0022Hello World\u0022"; // "Hello World"
string variableWidth = "\x22Hello World\x22"; // "Hello World"
Выделение специальных символов в символьных литералах
Апострофы
char apostrophe = '\'';
бэкслэш
char oneBackslash = '\\';
Выделение специальных символов в строковых литералах
бэкслэш
// The filename will be c:\myfile.txt in both cases
string filename = "c:\\myfile.txt";
string filename = @"c:\myfile.txt";
Во втором примере используется строковый литерал , который не обрабатывает обратную косую черту как escape-символ.
Цитаты
string text = "\"Hello World!\", said the quick brown fox.";
string verbatimText = @"""Hello World!"", said the quick brown fox.";
Обе переменные будут содержать один и тот же текст.
«Привет, мир!», - сказала быстрая коричневая лиса.
Newlines
Вербальные строковые литералы могут содержать символы новой строки:
string text = "Hello\r\nWorld!";
string verbatimText = @"Hello
World!";
Обе переменные будут содержать один и тот же текст.
Неопознанные escape-последовательности создают ошибки времени компиляции
Следующие примеры не будут компилироваться:
string s = "\c";
char c = '\c';
Вместо этого они будут генерировать ошибку Unrecognized escape sequence
во время компиляции.
Использование escape-последовательностей в идентификаторах
Последовательности Escape не ограничиваются string
и char
символами.
Предположим, вам необходимо переопределить сторонний метод:
protected abstract IEnumerable<Texte> ObtenirŒuvres();
и предположим, что символ Œ
недоступен в кодировке символов, используемой для исходных файлов C #. Вам повезло, разрешено использовать \U########
типа \u####
или \U########
в идентификаторах кода. Так что законно писать:
protected override IEnumerable<Texte> Obtenir\u0152uvres()
{
// ...
}
и компилятор C # будет знать, что Œ
и \u0152
являются \u0152
и тем же символом.
(Тем не менее, может быть хорошей идеей переключиться на UTF-8 или аналогичную кодировку, которая может обрабатывать все символы.)